如何将CLI应用程序作为Windows服务运行?

时间:2008-10-03 06:57:24

标签: windows windows-services

假设我有第三方应用程序执行后台工作,但将所有错误和消息打印到控制台。这意味着,目前,我们必须让用户登录到服务器,并在每次重新启动时重新启动应用程序(双击)。

不太酷。

我很确定,有一种简单的方法可以做到这一点 - 通用服务包装器,可以使用stdoutstderr的日志文件进行配置。

我确实检查过svchost.exe,但according to this site只检查了DLL的内容。可惜。

编辑:需要从批处理文件启动应用程序。 FireDaemon似乎可以解决这个问题,但是我认为这有点过分,因为可以在&lt; 10行的python代码中完成......哦,好吧,不是在这里发明的 ... < / p>

5 个答案:

答案 0 :(得分:11)

srvany.exe查看Resource Kit。这将让任何东西作为服务运行。

您可以通过srvany.exe将服务定义中的参数传递给您的可执行文件,这样您就可以通过按如下方式设置注册表来运行批处理文件作为服务:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Parameters]
"Application"="C:\\Windows\\System32\\cmd.exe"
"AppParameters"="/C C:\\My\\Batch\\Script.cmd"
"AppDirectory"="C:\\My\\Batch"

注意:如果您在RegEdit中设置这些键而不是使用文件,则只需要在值中使用单个反斜杠。

答案 1 :(得分:4)

我建议NSSM: The Non-Sucking Service Manager

  • 32/64位EXE
  • 公共领域(!)
  • 正确实现服务停止消息,并将正确的信号发送到您的应用程序以便正常关闭。

答案 2 :(得分:3)

为什么不简单地实现一个非常瘦的服务包装器,这是一个用.NET编写服务的快速入门指南Writing a Useful Windows Service in .NET in Five Minutes

当你运行时,你可以使用Process类来启动应用程序并对其进行配置,以便你自己处理stdout / stderr(ProcessStartInfo是你的朋友)。

答案 3 :(得分:1)

查看FireDaemon。有一个免费版本(我认为是FireDaemon lite),它一次只允许安装1个服务,但这是一个非常有用的工具来设置服务。如果需要,它还会正确地包装批处理文件。

答案 4 :(得分:0)

我选择了fireaemon选项。您可能还需要设置选项以允许服务与桌面交互以允许它显示cli输出窗口。他们不再提供免费版本,但如果你在网上搜索fireaemon lite,你可以找到较旧的免费精简版或者可以去付费路线。