在没有Visual Studio的情况下创buildWindows服务

所以使用Visual Studio创build一个Windows服务是相当简单的。 我的问题要深入一些,可以将可执行文件安装为服务,以及如何将服务编写为直接的C应用程序。 我找不到很多这方面的参考,但我假设必须有一些我可以实现的接口,所以我的.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; } 

的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; } 

基本上有一些注册表设置,你必须设置以及一些接口来实现。

看看这个: http : //msdn.microsoft.com/en-us/library/ms685141.aspx

您对SCM(服务控制管理器)感兴趣。

希望这可以帮助:

http://support.microsoft.com/kb/251192

这似乎是你简单地需要运行这个exe对二进制可执行文件注册为服务。

我知道我晚了一点,但最近我也有同样的问题,不得不通过互联网寻找答案。

我设法在MSDN中找到这篇文章,其实奠定了基础。 我最终将许多文件合并到一个包含所有我需要的命令的exe文件中,并添加到我自己的“void run()”方法中,该方法根据自己的需要循环执行服务的完整生命周期。

对于有这个问题的其他人来说,这将是一个很好的开始,所以对于未来的搜索者来说,请检查一下:

完整的服务示例 http://msdn.microsoft.com/zh-cn/library/bb540476(VS.85).aspx