我写了一个“做东西”的控制台程序 - 主要是使用boost。如何将其转换为Windows服务? 我应该事先了解Windows服务?
答案 0 :(得分:17)
There's a good example on how to set up a minimal service on MSDN。请参阅有关编写主函数,入口点以及示例代码的部分。
一旦你建立并运行了一个Windows服务,你就会发现下一个主要问题:调试很痛苦。没有终端(因此没有stdout / stderr),一旦你尝试运行可执行文件,它就会启动服务,然后返回给你。
我发现非常有用的一个技巧是为您的应用添加-foreground
选项,这样如果您使用该标志运行,那么它会绕过服务启动程序代码,而是像常规控制台应用程序一样运行,这使得它更容易调试。在VS.Net中设置调试选项以使用该标志调用。
答案 1 :(得分:4)
在msdn here
上有一个很好的例子这是一个锅炉板C ++服务项目,具有自安装/卸载功能,并将服务启动和停止事件记录到Windows事件日志中。它可以像其他服务一样通过服务应用程序(snapin)停止和启动。您可能希望最初为其提供LocalSystem权限以查看它是否正常工作,因为在xp上至少它没有足够的权限来启动LocalService的项目提供权限。尽管下载的指令另有说明,否则Visual Studio 2008项目开箱即用。
有点晚但我希望这有助于其他人。
答案 2 :(得分:2)
答案 3 :(得分:2)
最简单的解决方案可能是在Visual Studio中创建一个新的Windows服务项目,并将代码复制到新项目中。
如果您重构代码以便从逻辑中拆分UI(在本例中为控制台),您可以创建一个执行工作的库,然后从Console项目和Service Project中调用它。 / p>
答案 4 :(得分:1)
您可以使用Srvany工具将应用程序配置为作为服务运行,该工具是Windows Server 2003 Resource Kit Tools.
的一部分答案 5 :(得分:0)
Srvany同时只允许一项服务。所以我写了我的srvany(sFany)让nginx和php-cgi一起作为windows服务运行。这是来源https://github.com/stxh/sFany