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

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

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

400281 次浏览

正如 Doug Currie 所说,使用 RunAsService。

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

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

不知道最后一个是否还适用... ... 那是我前段时间做的一个项目中的一个大噩梦。

虽然它不是免费的(但39美元) ,火焰守护者已经为我工作得很好,我不得不推荐它。它可以运行你的批处理文件,但是有很多附加的非常有用的功能,比如调度、服务监控、基于 GUI 或 XML 的服务安装、依赖、环境变量和日志管理。

我开始使用 FireDaemon 来启动 JBoss 应用服务器(快跑,蝙蝠) ,但是不久之后我意识到 FireDaemon 配置功能的丰富性使我可以丢弃批处理文件,并在 FireDaemon 服务定义中重新创建其命令的意图。

还有一个叫做 Trinity 的超级 FireDaemon,如果你有大量的 Windows 服务器来管理这个服务(或者从技术上来说,任何服务) ,你可能想看看它。

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

nssm install "YourCoolServiceNameLabel"

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

卸载

nssm remove "YourCoolServiceNameLabel"

有一个内置的窗口 cmd 这样做: 创造。没有 nssm 那么花哨,但是你不需要下载额外的软件。

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

注意

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

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

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

在 Windows2019Server 上,你可以用以下命令运行 Minecraft java 服务器:

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

Lnk 文件是批处理文件的标准窗口快捷方式。

- . bat 文件开始-

Java-Xmx40960M-Xms40960M-d64-jar minecraft _ server.1.15.1. jar

- . bat 文件结束-

这一切都是因为:

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

Exe 不知道如何在文件夹中启动

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

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

安装 NSSM 并将.bat 文件作为 Windows 服务运行。 果然有效

由于不再维护 NSSM,您可以考虑使用 温莎。它有可以使用或不使用的二进制文件。网。

基本上就是创建一个 XML 文件,然后安装它:

<service>


<!-- ID of the service. It should be unique across the Windows system-->
<id>myapp</id>


<!-- Path to the executable, which should be started -->
<!-- CAUTION: Don't put arguments here. Use <arguments> instead. -->
<executable>%BASE%\myExecutable.exe</executable>


</service>

然后你可以安装并启动它:

winsw install myapp.xml
winsw start myapp.xml

我最简单的方法是在 中使用开源 < strong > svcbatch (https://github.com/mturk/svcbatch/)作为 CMD (BAT)的包装:

Sc create myservice binPath = “”% cd% svcbatch.exe“ myservice.bat”