
- •Введение
- •1. Службы Windows.
- •1.1. Программа – служба
- •1.2. Три компонента сервиса
- •1.3. Диспетчер управления сервисами (scm)
- •1.4. Программы управления сервисами
- •1.5. Учетные зависи сервиса
- •1.6. Начало работы сервиса
- •1.7. Выполнение сервиса
- •2. Разработка сервиса Win32.
- •2.1. Структура программы сервиса
- •2.2. Протокол взаимодействия scm и сервиса
- •2.3. Пример функций сервиса.
- •Программа, осуществляющая установку сервиса.
- •Отладка сервиса.
- •Литература
- •Оглавление
Программа, осуществляющая установку сервиса.
Для установки сервиса в систему можно использовать вспомогательную программу.
#include <windows.h>
using namespace std;
int wmain(int argc, WCHAR **argv)
{
SC_HANDLE sSCM = OpenSCManager
( NULL, //локальный компьютер
NULL,//активная база данных сервиса
SC_MANAGER_ALL_ACCESS//права доступа );
SC_HANDLE MyService = CreateService(
sSCM, //база данных SCM
L"Mserv", //имя сервиса
L"My Service", //отображаемое имя сервиса
SERVICE_ALL_ACCESS, //доступ
SERVICE_WIN32_OWN_PROCESS, //тип сервиса
SERVICE_DEMAND_START, //тип запуска
SERVICE_ERROR_NORMAL, //тип контроля ошибок
argv[1], //путь к сервису
NULL, //нет группы
NULL, //нет тега идентификатора
NULL, //нет зависимости
NULL, //учетная запись LocalSystem
NULL); //нет password
If (MyService == NULL)
{
printf(“CreateService failed (%d)\n”, GetLastError());
CloseServiceHandel(sSCM);
Return;
}
CloseServiceHandle(MyService);
CloseServiceHandle(cSCM);
}
Отладка сервиса.
Для отладки сервиса необходимо подключить отладчик к отлаживаемому процессу до того, как возникнет ошибка. Для реализации этой задачи можно использовать следующие способы отладки:
Подключение отладчика к исследуемому процессу вручную. Подключить отладчикк уже запущенному процессу можно двумя способами: из Task Manadger или с помощью команды Build->Start Debug->Attach to Process. Недостатки этого способа связаны с тем, что от запуска процесса до присоединения отладчика проходит некоторое время, за которое может возникнуть ошибка.
Использование точки DebugBreak. Функцию DebugBreak можно использовать для прерывания выполнения программы в любом месте. Для этого в исходный код вписывается вызов функции: DebugBreak(). Вызов этой функции аналогичен точке останова. Если режим Jast-in-Time debugging включен, то система приостановит программу и будет запущен Visual Studio Jast-in-Time Debugger. Для установки режима Jast-in-Time debugging нужно выполнить следующие действия: 1. В меню Tools выбрать пункт Options; 2. В диалоговом окне Options выбрать папку Debugging; 3. В папке Debugging выбрать страницу Just-In-Time; 4. Для того, чтобы допустить Just-In-Time debugging выбрать или очистить отвечающие программе: Managed, Native, или Script. Для изменения ключа Just-In-Time debugging необходимо иметь права Администратора; 5. Нажать OK.
Автоматическое подключение отладчика к процессу. Для подключения отладчика к некоторому процессу нужно открыть редактор реестра, выполнив regedit и открыть ключ HKEY_LOCAL_MACHINE\SOFTWARE\Mocrosoft\Windows NT\Current\Image File Execution Option и добавить подключ, имя которого совпадает с именем exe-файла. В этом подключе надо создать строковый параметр Debugger и записать в него полный путь к отладчику Visul C++. После присоединения отладчика последовательность действий будет такой:
Если сервис продолжает выполняться, необходимо остановить его.
Следует убедиться, что отладочные символы для приложения загружены. Для этого нужно открыть окно Debug и посмотреть сообщения отладчика. Если присутствует строка “Loaded symbol for …, no matching symbolic information found”, отладчик не нашел отладочные символы.
Открыть файлы с исходными кодами (File->Open) и поставить в нужных местах точки останова.
Возобновить работу приложения.