Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сервисы-пос1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
688.64 Кб
Скачать

Программа, осуществляющая установку сервиса.

Для установки сервиса в систему можно использовать вспомогательную программу.

#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);

}

    1. Отладка сервиса.

Для отладки сервиса необходимо подключить отладчик к отлаживаемому процессу до того, как возникнет ошибка. Для реализации этой задачи можно использовать следующие способы отладки:

  • Подключение отладчика к исследуемому процессу вручную. Подключить отладчикк уже запущенному процессу можно двумя способами: из 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++. После присоединения отладчика последовательность действий будет такой:

  1. Если сервис продолжает выполняться, необходимо остановить его.

  2. Следует убедиться, что отладочные символы для приложения загружены. Для этого нужно открыть окно Debug и посмотреть сообщения отладчика. Если присутствует строка “Loaded symbol for …, no matching symbolic information found”, отладчик не нашел отладочные символы.

  3. Открыть файлы с исходными кодами (File->Open) и поставить в нужных местах точки останова.

  4. Возобновить работу приложения.