7

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

不是很酷。

我很确定,有一种简单的方法可以做到这一点 - 一个通用的服务包装器,可以为stdout和配置一个日志文件stderr

我确实检查过svchost.exe,但根据这个站点,它只适用于 DLL 的东西。遗憾。

编辑:应用程序需要从批处理文件启动。FireDaemon 似乎可以解决问题,但我认为这有点矫枉过正,因为可以在不到 10 行 python 代码中完成......哦,好吧,这里没有发明......

4

6 回答 6

11

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而不是使用文件,则值中只需要单个反斜杠。

于 2008-10-03T06:59:33.190 回答
4

我推荐NSSM: The Non-Sucking Service Manager

  • 32/64 位 EXE
  • 公共区域 (!)
  • 正确实现服务停止消息,并向您的应用程序发送正确的信号以进行正常关闭。
于 2012-06-04T02:55:03.070 回答
3

为什么不简单地实现一个非常薄的服务包装器,这里有一个在 .NET 中编写服务的快速入门指南 在 .NET 中编写一个有用的 Windows 服务在五分钟内

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

于 2008-10-03T07:15:18.580 回答
1

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

于 2008-10-03T07:04:25.067 回答
0

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

于 2008-10-10T04:27:48.033 回答
0

NSSM 早已死去。建议在 Windows 10 或 Windows 11 上使用WinSW

于 2022-01-26T16:48:35.360 回答