如何将CLI应用程序作为Windows服务运行?
假设我有一个第三方应用程序,它可以进行后台工作,但是将所有错误和消息打印到控制台。这意味着,当前,我们必须保持用户登录服务器,并在每次重新启动时重新启动应用程序(双击)。
不太酷。
我敢肯定,有一个简单的方法可以完成通用服务包装程序,可以使用stdout
和stderr
的日志文件进行配置。
我确实检查了" svchost.exe",但是根据此站点,它仅用于DLL东西。遗憾。
编辑:该应用程序需要从批处理文件启动。 FireDaemon似乎可以解决问题,但我认为这有点过头了,因为可以在不到10行的python代码中完成某些事情。
解决方案
从资源工具包中检出srvany.exe
。这将使任何东西作为服务运行。
我们可以通过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中设置了这些键,而不是使用文件,则只需要在值中添加一个反斜杠即可。
查看FireDaemon。有一个免费版本(我认为是FireDaemon lite),一次只能安装1个服务,但这是设置服务的非常有用的工具。如果需要,它也可以正确包装批处理文件。
为什么不简单地实现一个非常薄的服务包装器,这是一个在.NET中编写服务的快速入门指南,所以在五分钟内在.NET中编写有用的Windows服务
运行该命令后,可以使用Process类启动应用程序并对其进行配置,以便我们可以自己处理stdout / stderr(ProcessStartInfo是朋友)。
我第二次使用firedaemon选项。我们可能还需要设置选项,以允许服务与桌面进行交互以允许其显示cli输出窗口。他们不再提供免费版本,但是如果我们在网上搜索firedaemon lite,则可以找到较早的免费lite版本,或者可以选择付费方式。