Как кодировать функцию OnStart для служебной программы Windows? - PullRequest
0 голосов
/ 17 июня 2011

Я создал сервис в Visual C ++. Установил его используя instsrv.exe и srvany.exe. Когда я проверяю приложение в панели управления «Службы», служба регистрируется. Но когда я хочу его запустить, появляется это сообщение:

the service on Local Computer started and then stopped. Some service stop automatically if they have no work to do, for example the  Performance logs and Alert Service.

У меня просто есть этот код внутри моей функции OnStart:

(void)system("C:\ReleaseExe\Example1Server.exe");

Мой код правильный? Или есть какой-то другой способ его кодирования, чтобы убедиться, что служба может быть в рабочем состоянии?

1 Ответ

1 голос
/ 17 июня 2011

Предполагая, что exe, который вы запускаете, фактически является вашим сервисом, это неправильный способ сделать это.

Диспетчер управления службами Windows (SCM) фактически вызывает EXE-файл вашей службы через определенные точки входа - вам необходимо предоставить логику, чтобы сделать то, что требуется вашей конкретной службе в этих точках входа, включая уведомление SCM об изменениях состояния вашей службы. (ОСТАНОВЛЕН-> РАБОТАЕТ, РАБОТАЕТ-> ОСТАНОВЛЕН и т. Д.).

Прочтите справочную информацию о MSDN, начиная с здесь , чтобы уточнить, что вы должны предоставить. Обратите внимание, что OnStart относится к реализации Services в управляемом коде, вы не будете делать это в Visual C ++. Возможно, C # будет более простым маршрутом?

...