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

将批处理文件作为Windows服务运行,windows,windows-services,batch-file,Windows,Windows Services,Batch File,为了运行一个应用程序,必须启动一个批处理文件(它可以启动Jetty、显示实时日志等)。仅当此批处理文件正在运行时,应用程序才会工作。因此,我被迫运行此批处理文件,而不是从Windows服务器注销 此批处理文件能否作为服务运行?正如Doug Currie所说的那样,我正在尝试一个来自。的建议 根据我过去的经验,您必须记住,您生成的服务将 有一套完全不同的环境变量 必须仔细检查权限/权限问题 如果它打开询问任何类型输入的对话框,可能会造成严重破坏 不确定最后一个是否仍然适用。。。这是我前一段时间

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


此批处理文件能否作为服务运行?正如Doug Currie所说的那样,我正在尝试一个来自。

的建议

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

  • 有一套完全不同的环境变量
  • 必须仔细检查权限/权限问题
  • 如果它打开询问任何类型输入的对话框,可能会造成严重破坏
不确定最后一个是否仍然适用。。。这是我前一段时间参与的一个项目中的一个大夜晚。

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

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


还有一个名为Trinity的超级FireDaemon,如果您有大量的Windows服务器来管理此服务(或技术上的任何服务),您可能会想看看它。

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

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

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

卸载

nssm remove "YourCoolServiceNameLabel"

有一个内置的windows cmd可以执行此操作:。不像nssm那么花哨,但您不必下载额外的软件

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

  • start=demand意味着您必须自己启动服务
  • =
  • 我确实在服务启动时遇到了一个错误,即服务没有及时响应,但很明显服务已经成功运行了.bat。我还没有深入研究这个问题,但这也经历了同样的事情,并通过使用nssm安装服务解决了这个问题

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


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

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

      sc create minecraft server DisplayName=“minecraft server”binpath=“cmd.exe/C:\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命令从游戏中终止服务器,或者对于其他程序/服务器,使用与服务器相关的方法。

      安装NSSM并将.bat文件作为windows服务运行。
      由于NSSM不再被维护,所以可以考虑使用

      >P>。它有可以使用或不使用.Net的二进制文件

      基本上是创建一个XML文件,然后安装它。下面是一个最小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>
      

      我有许多批处理文件通过robocopy进行备份,这些文件是通过运行在Win 2003服务器上的计划任务(转到控制面板,计划任务)启动的。这是一种享受…我们只是用一个脚本来监控我们的备份服务。这是最好的解决方案,不需要第三方软件,也不需要命令行界面。另外,任务调度器为触发器、条件等提供了很多选项。现在我明白了这一点:当任务在启动时运行时(使用“无论用户是否登录都运行”)%UserProfile%是C:\Users\Default\任何其他时间它都将是预期的C:\Users\ExpectedUser\这可能会为某些.bat文件造成神秘的故障,而这些文件在其他计划任务中似乎工作正常。计划任务是出了名的不可靠-实际上,我遇到了这个问题,因为我遇到了所有与非计划任务相关的问题无缘无故准时发射。+1从未听说过这一次,但它非常好。NSSM确实不烂!我花了2分钟安装了一个service@JuniorI’谢谢!!你救了我。我为此花了4个小时。谢谢您知道是否有办法在输入时为nssm提供所有必要的参数,以避免弹出数据输入--我正在尝试自动化该过程?GDATA antivirus不断删除我们一些客户的nssm。是的,我知道,白名单。。。但客户不会做对他们有利的事。这是令人悲哀的事实。批处理编程是关于堆栈交换的主题。好问题+1.版主们太生气了。。。另外,我还有一个很好的答案,但问题已经解决了((我改用这个RunaService:。它使用起来非常简单。没有XML配置的废话。基本上这是JU
      winsw install myapp.xml
      winsw start myapp.xml