java 启动windows服务_JavaService.exe注册的windows服务无法启动问题

最近开发了个java程序,打成 jar 包想要在windows后台运行,于是使用JavaService.exe进行windows服务注册,服务注册很成功,但是在启动时显示“服务无法启动”,为此耗费了大量的时间与精力,终于发现问题所在,特此记录。

为了排除各种干扰因素,专门开发了个简单的java程序用于测试,查找问题原因。测试程序非常简单,就是循环打印当前时间,如下所示:

packagecom.example;importjava.time.LocalDateTime;public classdemo {public static voidmain(String[] args) {do{

System.out.println(LocalDateTime.now());try{

Thread.sleep(1000);

}catch(InterruptedException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}while (true);

}

}

接下来,打 jar 包 test.jar(打包方法不是重点,省略)

有了 jar 包,开始注册windows服务,服务注册成功,结果如下:

C:\Users\xxx\Desktop\JavaService-2.0.10>JavaService.exe -install test "%JAVA_HOME%"\jre\bin\server\jvm.dll -Djava.class.path=C:\Users\xxx\Desktop\test.jar;"%JAVA_HOME%"\lib\tools.jar -Xms64M -Xmx512M -start com.example.demo

The test automatic service was successfully installed

启动服务,报错:“test 服务无法启动”

C:\Users\xxx\Desktop\JavaService-2.0.10>net starttest

test 服务正在启动.test 服务无法启动。

服务没有报告任何错误。

请键入NET HELPMSG 3534 以获得更多的帮助。

程序是可以正常运行的,使用 .bat 批处理脚本也可以启动,但是使用JavaService.exe注册的服务就是无法启动。

测试程序没有使用任何第三方库,排除库相关的问题;检查JAVA_HOME环境变量,没有问题;JAVA_HOME环境变量中存在空格问题,加双引号即可(即命令行中的 "%JAVA_HOME%"),不是这个问题;cmd.exe是以管理员身份运行的,不是管理员权限问题。各种办法都试过了,开始怀疑JavaService.exe有bug或者版本兼容问题,找到下载地址,这个程序最新版2.0.10都是2007年的,都十多年了,不可能有这样严重的bug这么多年过去了程序还没更新,2.0.10版网上有人也在用,也没说有问题啊!最后看到有人用JavaService_2_0_10-amd64这个版本,找来试试吧,死马当活马医了,结果这一试不要紧 ,居然启动成功了!

如果使用的是64位版本的Java,JavaService.exe也要用64位版本,切记!!!JavaService.exe下载页面的文件排列顺序很让人无语,下载过好几次都没有注意到64位版本的存在,尤其是我使用的2.0.10版,64位版本竟然在最下边,不拉到底根本就看不到!

补充:测试程序 demo 的服务 test 启动成功,但自己实际要运行的程序还是不能启动,原因是 JavaService -start 参数设置不对,我的程序是个springboot项目,启动类是“org.springframework.boot.loader.JarLauncher”,-start 参数改过来就好了。

最后,附上JavaService.exe下载地址:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
prunsrv.exeWindows操作系统下的一个可执行文件,它是Apache Common Daemon库的一部分,用于将Java程序以Windows服务的方式运行。Zookeeper集群是一个分布式的协调服务,可以帮助开发人员在分布式系统中管理和协调各个节点之间的通信和同步。 prunsrv.exe可以将Zookeeper集群作为Windows服务来运行,这样可以轻松地将Zookeeper集群集成到Windows环境中。通过将Zookeeper配置为Windows服务,可以使其在系统启动时自动启动,并在后台持续运行,而不需要手动启动或终止它。 配置Zookeeper集群为Windows服务主要涉及到以下步骤: 1. 下载安装Apache Zookeeper,并确保在Windows系统上配置了Java环境。 2. 将prunsrv.exe复制到Zookeeper的安装目录下。 3. 编辑Zookeeper的配置文件,通常为zoo.cfg。 4. 在配置文件中指定Zookeeper要监听的端口以及其他相关的配置信息。 5. 打开命令提示符窗口,切换到Zookeeper的安装目录,执行以下命令来安装Windows服务:prunsrv.exe //IS//ZookeeperService --DisplayName="Zookeeper Service" --Install="D:\zookeeper\zookeeper-3.7.0\bin\prunsrv.exe" --Jvm=auto --StartMode=jvm --StopMode=jvm --Classpath="D:\zookeeper\zookeeper-3.7.0\zookeeper-server\bin\zookeeper-server.jar" --StartClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StartParams="D:\zookeeper\zookeeper-3.7.0\bin\zoo.cfg" --StopClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StopParams="D:\zookeeper\zookeeper-3.7.0\bin\zoo.cfg" 6. 完成安装后,可以使用以下命令来启动Windows服务:prunsrv.exe //ES//ZookeeperService 7. 使用以下命令来停止Windows服务:prunsrv.exe //SS//ZookeeperService 总之,通过使用prunsrv.exe,可以将Zookeeper集群配置为Windows服务,从而将其集成到Windows环境中,并实现自动化启动和关闭。这样可以极大地简化Zookeeper集群的管理和部署,并提高系统的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值