Настройка вашего исполняемого файла в качестве службы является его частью, но реально он обычно обрабатывается любым программным обеспечением, которое вы используете. Вы можете использовать инструмент командной строки SC во время тестирования (или, если вам не нужен установщик).
Важно, что ваша программа должна вызывать StartServiceCtrlDispatcher () при запуске. Это подключает вашу службу к диспетчеру управления службами и устанавливает подпрограмму ServiceMain, которая является главной точкой входа ваших служб.
ServiceMain (вы можете называть его как угодно, но на самом деле он всегда ServiceMain) должен затем вызвать RegisterServiceCtrlHandlerEx (), чтобы определить процедуру обратного вызова, чтобы ОС могла уведомлять вашу службу при возникновении определенных событий.
Вот некоторые фрагменты из службы, которую я написал несколько лет назад:
настроен как сервис:
SERVICE_TABLE_ENTRY ServiceStartTable[] =
{
{ "ServiceName", ServiceMain },
{ 0, 0 }
};
if (!StartServiceCtrlDispatcher(ServiceStartTable))
{
DWORD err = GetLastError();
if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
return false;
}
ServiceMain:
void WINAPI ServiceMain(DWORD, LPTSTR*)
{
hServiceStatus = RegisterServiceCtrlHandlerEx("ServiceName", ServiceHandlerProc, 0);
сервисный обработчик:
DWORD WINAPI ServiceHandlerProc(DWORD ControlCode, DWORD, void*, void*)
{
switch (ControlCode)
{
case SERVICE_CONTROL_INTERROGATE :
// update OS about our status
case SERVICE_CONTROL_STOP :
// shut down service
}
return 0;
}