将可执行文件设置为服务是其中的一部分,但实际上它通常由您使用的任何安装软件来处理。您可以在测试时使用命令行 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;
}
服务主要:
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;
}