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

pub*_*avi 149 windows windows-services batch-file

为了运行一个应用程序,必须启动一个批处理文件(例如启动Jetty,显示实时日志等).仅当此批处理文件正在运行时,该应用程序才有效.因此我被迫让这个批处理文件运行,而不是从Windows服务器注销.

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

Jun*_*r M 137

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

nssm install "YourCoolServiceNameLabel"
Run Code Online (Sandbox Code Playgroud)

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

卸载

nssm remove "YourCoolServiceNameLabel"
Run Code Online (Sandbox Code Playgroud)

  • +1从未听说过这个,但非常好.NSSM确实没吸! (22认同)
  • 哦,我的上帝!这个工具很棒!你救了我.谢谢. (4认同)
  • @Junior M谢谢!! 你救了我.我已经花了4个小时.谢谢!! (2认同)
  • 你知道是否有办法在输入时为 `nssm` 提供所有必要的参数以避免弹出数据输入——我正在尝试自动化这个过程吗? (2认同)

Ste*_*tin 61

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

  • 现在我知道了,可以正常工作:当任务在启动时运行(带有“运行是否登录用户”的任务)时,%UserProfile%是C:\ Users \ Default \其他任何时候,它将是预期的C:\ Users \ ExpectedUser \这可能会对某些似乎在其他计划任务中正常工作的.bat文件造成神秘的故障。 (3认同)
  • 计划任务是出了名的不可靠 - 我实际上遇到了这个问题,因为我遇到了任务没有明显原因没有按时启动的所有问题。 (2认同)

w00*_*ngy 17

有一个内置的Windows cmd来做到这一点:sc create.不像nssm那样华丽,但你不必下载额外的软件.

sc create "ServiceName" start= demand displayname= "DisplayName" binpath= [path to .bat file]
Run Code Online (Sandbox Code Playgroud)

注意

  • start = demand意味着您必须自己启动服务
  • 之后需要空格 =
  • 我确实在服务启动时遇到了服务没有及时响应的错误,但很明显服务已成功运行.bat.还没有挖到这个但是这个线程经历了同样的事情并使用nssm来解决它来安装服务.

  • 获取“_Error 1053:服务没有及时响应启动或控制请求。_” (8认同)
  • Windows似乎没有将.bat文件作为服务运行。 (3认同)
  • 在我的情况下,批处理文件应该创建的文件没有创建并且程序没有运行,所以我必须假设它没有启动它。我设法通过创建服务来运行 cmd.exe /C <batchfile> 来解决它。请注意,我使用的是 Windows 10,所以这可能是一些新的“安全”问题。 (2认同)
  • 如果从 powershell 运行,请使用完整文件名 sc.exe。正如错误将告诉您的那样,sc 是 Set-Content 的别名。 (2认同)
  • 我们可以将其中任何一个指定为启动类型(启动、系统、自动、需求、禁用、延迟自动),以代替 **需求** 作为 **启动类型** (2认同)

Zed*_*iii 7

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

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


Goo*_*311 6

在 Windows 2019 Server 上,您可以使用以下命令运行 Minecraft java 服务器:

sc create minecraft-server DisplayName= "minecraft-server" binpath="cmd.exe /CC:\Users\Administrator\Desktop\rungui1151.lnk" type= own start= auto

.lnk 文件是批处理文件的标准 Windows 快捷方式。

--- .bat 文件开始 ---

java -Xmx40960M -Xms40960M -d64 -jar minecraft_server.1.15.1.jar

--- .bat 文件结束 ---

这一切都是因为:

服务不知道如何在文件夹中启动,

cmd.exe 不知道如何在文件夹中启动

启动服务会产生“及时方式”错误,但日志文件显示服务器正在运行。

如果您需要关闭服务器,只需进入任务管理器在后台进程中找到服务器java并结束它,或者使用/stop命令从游戏中终止服务器,或者对于其他程序/服务器,使用方法与服务器有关。

  • 如果你正确阅读它,你会发现它包含与示例相关的完美答案 (3认同)
  • @JeremyJStarcher 我认为这实际上是这里最好的答案。只是没有得到很好的解释。但答案是使用 binpath="cmd.exe /C [一些批处理文件]" (2认同)

lex*_*exu 3

正如 Doug Currie 所说,使用 RunAsService。

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

  • 有一组完全不同的环境变量
  • 必须仔细检查权限/权限问题
  • 如果它打开要求任何类型输入的对话框,可能会造成严重破坏

不确定最后一个是否仍然适用......这是我前段时间参与的一个项目中的一场噩梦。