Запуск и управление службой

октября 12 2009 by admin in Службы

Как я уже говорил, многие службы выпускаются вместе с клиентским приложением, позволяющим администраторам запускать, завершать, приостанавливать, продолжать и другими методами контролировать работу огужбы. Написать такую программу очень просто. Работает она так: сначала открывает SCM на нужном компьютере, вызвав для этого функцию OpenSCManager с правом доступа SC_MANAGER_CONNECT. Затем такая программа открывает службу с помощью OpenService, используя при этом нужную комбинацию прав доступа SERVICE_START, SERVlCE_STOP, SERVlCE_PAUSE_CONTINUE, SERVICE_USER_ DEFINED_CONTROL и SERVICEJNTERROGATE. После этого службу можно запустить функцией StartService-.
BOOL StartService( SC_HANDLE hService, DWORD dwArgc,
PCTSTR* pszArgv);
Параметр hService идентифицирует открытую службу, a dwArgc и pszArgv указывают на аргументы, передаваемые в службу, в ее функцию ServiceMain. Обычно последние два параметра не используются, поэтому их можно установить в О или NULL. Помните.- запуск одной службы может повлечь за собой запуск других служб или групп, от которых она зависит. Перечислю основные причины неудачного выполнения функции StartService.
Функция StartService завершается сразу после создания основного потока службы, следовательно, к этому моменту служба может быть еще не готова обрабатывать управляющие коды или запросы клиента. Кроме того, служба не должна вызывать StartService при инициализации, иначе может произойти блокировка (длящаяся 80 секунд). Проблема в том, что при запуске службы SCM блокирует свою БД, чтобы предотвратить запуск другой службы.