将C ++程序转换为Windows服务?

时间:2009-10-12 11:32:46

标签: c++ winapi

我写了一个“做东西”的控制台程序 - 主要是使用boost。如何将其转换为Windows服务? 我应该事先了解Windows服务?

6 个答案:

答案 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)

您可以使用CodeProject中的此工具“包装它”:

http://www.codeproject.com/KB/system/xyntservice.aspx

值得一看。

答案 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