因此,使用 Visual Studio 创建 Windows 服务相当简单。我的问题更深入一些,关于什么实际上使可执行文件可安装为服务以及如何将服务编写为直接 C 应用程序。我找不到很多关于此的引用资料,但我假设必须有一些我可以实现的接口(interface),以便我的 .exe 可以作为服务安装。
最佳答案
将可执行文件设置为服务是其中的一部分,但实际上它通常由您使用的任何安装软件处理。您可以在测试时使用命令行 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;
}
关于在没有 Visual Studio 的情况下创建 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699/