C++ 编写Windows service

时间:2023-11-18 15:25:08

最近实现一个windows server端守护进程启动服务功能(c++实现),遇到了一些问题,记录一下

1. 启动Service实现代码:

 int _tmain(int argc, TCHAR* argv[])
{
SERVICE_TABLE_ENTRYW dispatch_table[] = {
{ gServiceName, (LPSERVICE_MAIN_FUNCTIONW)serviceMain },
{ NULL, NULL }
}; if (!StartServiceCtrlDispatcherW(dispatch_table))
{
svcReportEvent(TEXT("StartServiceCtrlDispatcherW Error!"));
gadgetLogWrite(NULL, "StartServiceCtrlDispatcherW Error!");
}
}
 void WINAPI serviceMain(DWORD argc, LPTSTR *argv)
{
gSvcStatusHandle = RegisterServiceCtrlHandlerW(gServiceName,
service_ctrl_handler); if (IS_INVALID_HANDLE(gSvcStatusHandle))
{
gadgetLogWrite(NULL, "Failed to register Service Control for %S", gServiceName);
return;
}
}

需要注意的是本地调试的时候,是无法获得ServiceCtrlHandler,必须要在系统服务里直接调用,所以测试打印一定要做好