将批处理文件作为Windows服务运行

Run batch file as a Windows service

为了运行一个应用程序,必须启动一个批处理文件(它执行诸如启动Jetty、显示实时日志等操作)。只有当批处理文件正在运行时,应用程序才能工作。因此,我被迫运行此批处理文件,而不是从Windows服务器注销。

这个批处理文件可以作为服务运行吗?我正在试验一个类似问题的建议。


NSSM完全免费,超简单,以管理员身份运行命令提示/终端:

1
nssm install"YourCoolServiceNameLabel"

然后会出现一个对话框,您可以选择要运行的文件的位置。

卸载

1
nssm remove"YourCoolServiceNameLabel"


为什么不简单地将其设置为计划在启动时运行的计划任务?


有一个内置的windows命令来做这个:sc-create。没有NSSM那么花哨,但是你不需要下载额外的软件。

1
sc create"ServiceName" start= demand displayname="DisplayName" binpath= [path to .bat file]

注释

  • 开始=需求意味着您必须自己启动服务
  • =后需要空白
  • 我确实在服务启动时遇到了一个错误,服务没有及时响应,但很明显服务已经成功运行了.bat。还没有深入研究这个问题,但是这个线程经历了同样的事情,并使用NSSM安装服务解决了这个问题。


虽然它不是免费的(但39美元),但FireDaemon对我来说工作得很好,我不得不推荐它。它将运行您的批处理文件,但具有许多附加的非常有用的功能,例如调度、服务启动监视、基于GUI或XML的服务安装、依赖项、环境变量和日志管理。

我开始使用FireDaemon启动JBoss应用程序服务器(run.bat),但不久之后我意识到FireDaemon配置功能的丰富性允许我放弃批处理文件,并在FireDaemon服务定义中重新创建其命令的意图。

还有一个名为Trinity的超级FireDaemon,如果您有大量的Windows服务器来管理此服务(或者从技术上讲,任何服务),那么您可能需要查看它。


正如Doug Currie所说,使用runasseservice。

根据我过去的经验,您必须记住,您生成的服务将

  • 有一组完全不同的环境变量
  • 必须仔细检查权限问题
  • 如果它打开要求任何类型输入的对话框,可能会导致混乱

不确定最后一个是否仍然适用…那是我前一段时间工作的一个项目中的一个重要夜晚。


不需要额外的软件。使用"任务计划程序"->"创建任务"->"隐藏"。"隐藏"复选框位于左下角。将任务设置为在登录时触发(或您喜欢的任何条件),然后在"操作"选项卡中选择该任务。运行hidden可以确保任务像服务一样在后台静默运行。

请注意,您还必须将程序设置为"无论用户是否登录",否则程序仍将在前台运行。


Alwaysupp可以很容易地将批处理文件作为服务运行。它类似于FireDaemon(上面提到的),并且不是免费的,但是您可能会发现在专业环境中丰富的功能集是一种资产。

祝你好运!