将java作为windows服务运行的简单灵活的方法

将java作为windows服务运行的简单灵活的方法,java,windows,windows-services,winrun4j,yajsw,Java,Windows,Windows Services,Winrun4j,Yajsw,我阅读了关于将java作为windows服务包装器发布的SO q&a,但找不到/选择适合我要求的产品: 包装器从配置文件读取所有java启动参数。注册表中必须只有运行包装器本身的命令—exe路径,也可能是配置路径。始终授予管理员权限以更改注册表中的应用程序参数是不合适的 工作目录和应用程序路径也必须在配置中。我想将所有包装文件深入到程序中,因为用户对它不感兴趣 没有依赖项(.net、python等)。我不想延长我的课程要求 适用于所有windows操作系统,包括win64 简单轻便。我的程序和所

我阅读了关于将java作为windows服务包装器发布的SO q&a,但找不到/选择适合我要求的产品:

  • 包装器从配置文件读取所有java启动参数。注册表中必须只有运行包装器本身的命令—exe路径,也可能是配置路径。始终授予管理员权限以更改注册表中的应用程序参数是不合适的

  • 工作目录和应用程序路径也必须在配置中。我想将所有包装文件深入到程序中,因为用户对它不感兴趣

  • 没有依赖项(.net、python等)。我不想延长我的课程要求

  • 适用于所有windows操作系统,包括win64

  • 简单轻便。我的程序和所有第三方JAR的大小是12字节。我不想添加20字节的包装器

  • 如果应用程序进程死亡,则自动重新启动

  • 最好是所有windows平台的单个exe文件

  • 我试着翻看不同的包装,有点累了。到目前为止,最合适的方法是:

  • jslwin(),但我不知道它有多成熟(版本0.99)。配置中的参数列表也有点复杂(需要编辑参数数量)
  • winrun4j(),但我不知道它有多成熟(版本0.45)。它还需要一个特殊的类来作为服务工作
  • 此外,我还尝试或查看:

  • YAJWS()太大(30mb),无法使用自定义文件布局
  • 高级安装程序()太大(50mb)
  • nssm()在注册表中存储启动参数(无配置)
  • winsw().net必需,在进程结束后停止
  • commons守护程序procrun()在注册表中存储启动参数(无配置),无法理解此产品,我认为它很复杂
  • jsmooth()复杂且陈旧(上次更新2007)
  • javaservice()旧版(上次更新2006)
  • runasservice()需要.net
  • windows rktools-sc、instsrv、srvany()-在注册表中存储启动参数(无配置)
  • jwrapper()似乎不是我需要的。它将java程序打包在带有JRE的exe文件中。这与windows服务无关
  • firedaemon()不是免费的。也许这不是我需要的
  • launch4j()很酷的功能“搜索或下载java”。也许我添加了类似这样的东西来简化安装,但它仍然不是关于subj的
  • Java服务包装器()对于win64不是免费的

  • 请告诉我哪种包装适合我的需要?或者也许我认为上面的包装器是错误的,其中一些适合我的需要?

    我不确定JWrapper是否会以您想要的方式满足所有要求,如1和2,因为JWrapper不是您指定它如何启动以及它将东西放在哪里等,而是以自己的方式处理这些东西,但它确实会产生win/mac/linux的可执行文件,更重要的是,它支持windows服务安装以及macos和linux守护程序安装:

    虽然该服务支持付费许可证,但免费版本目前不支持该服务


    披露:我为JWrapper工作

    这些年来我也遇到过类似的问题。这并不是说它们都很差,而是它们都很难与您自己的项目很好地集成

    您可能想查看鹳:

    它将帮助您为Java控制台或守护程序应用程序创建启动器,它们将在所有主要平台上工作。还有一个maven插件,以防您想将其绑定到现有的构建过程中