2009-10-12 96 views

回答

16

There's a good example on how to set up a minimal service on MSDN一部分配置应用程序作为服务运行。查看有关编写主函数,入口点和示例代码的部分。

一旦建立并运行了Windows服务,您将发现下一个主要问题:调试很痛苦。没有终端(因此没有stdout/stderr),只要您尝试运行可执行文件,它实际上会启动服务,然后返回给您。我发现非常有用

一个窍门是一个-foreground选项添加到您的应用程序,所以如果你有该标志运行,那么它绕过了服务启动代码和运行,而不是像一个普通的控制台应用程序,这使得它容易很多进行调试。在VS.Net中设置调试选项来调用该标志。

+1

这里有一些有用的调试技巧(特别是使用gflags自动启动调试器):http:// support .microsoft.com/kb/824344 – 2009-10-12 12:50:35

+0

是否将-foreground添加到命令行? – Maciek 2009-10-12 17:41:03

+0

是的,如果你运行没有标志,那么服务就会被安装并运行(这是服务需要工作的方式)。如果使用-foreground选项运行,则绕过服务安装步骤。 – 2009-10-13 08:47:54

2

最简单的解决方案可能是在Visual Studio中创建一个新的Windows Service项目,并将您的代码复制到新项目中。

如果你重构你的代码,使您从您可以创建做的工作库,然后调用来自两个控制台项目和服务项目的逻辑分割UI(在这种情况下,控制台)。

+0

而不是剪切和粘贴将您的工作代码( - 用户界面)作为库加载到服务中 – Patrick 2009-10-12 12:07:33

0

Srvany同时只允许一个服务。所以我写了我的svvany(sFany)让nginx和php-cgi一起作为windows服务运行。这里是源https://github.com/stxh/sFany

3

有MSDN上here

一个很好的例子就是这么具有自我安装/卸载功能和日志服务的启动和停止事件到Windows事件日志中的锅炉板C++服务项目。它可以像其他服务一样通过服务应用程序(snapin)停止和启动。您最初可能需要给LocalSystem权限才能看到它的工作,因为在XP上,至少它没有足够的权限来开始提供LocalService权限的项目。尽管下载的说明暗示了其他情况,但Visual Studio 2008项目仍然可以使用。

有点晚了,但我希望这可以帮助别人。