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

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

点击(此处)折叠或打开

package com.example; import java.time.LocalDateTime; public class demo { public static void main(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 start test

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下载地址:

java程序服务不能启动不了_JavaService.exe注册的windows服务无法启动问题相关推荐

  1. python打包成exe,并将exe注册到windows服务中

    前段时间接到需求,需要将py脚本打包成exe,并且注册到windows服务中,保证电脑启动时服务能够自动启动,因此选择了pyinstaller进行打包,简单易操作. 安装所需要的包 pip insta ...

  2. bat文件注册为Windows服务与依赖关系设置

    文章目录 1. 批处理文件注册为服务 1.1 应用场景 1.2 操作步骤 1.2.1 编写批处理文件; 1.2.2 借助instsrv+srvany将批处理文件注册为服务: 1.2.3 设置服务之间的 ...

  3. 使用wrapper将java程序注册程windows服务后不生效

    使用wrapper将java程序注册程windows服务后不生效 使用add.bat或test***.bat测试通过了, 然后使用install***.bat注册后cmd显示注册成功. 但是程序到了运 ...

  4. 通过jsl工具将java程序注册为windows服务

    通过jsl工具将java程序注册为windows服务 首先下载jsl工具包,主要有jsl.exe可执行文件和jsl.ini配置信息文件 jsl 下载地址 在应用目录下新建以下几个路径 lib目录内容如 ...

  5. SpringBoot注册为windows服务

    由于通过java -jar方式启动的springboot程序需要有一个cmd窗口,无法实现Linux上nohup命令的后台 运行效果.所以需要将开发的springboot程序注册成windows服务, ...

  6. Tomcat注册为Windows服务

    说明:本文所使用的Tomcat版本为Tomcat7.0.51,跨版本可能存在不同,其他版本未做验证,操作系统为Windows7. Tomcat下载 1.进入https://tomcat.apache. ...

  7. java桌面程序与服务交互_Java作为具有交互式桌面支持的Windows服务并读取curren登录用户...

    我有一个java程序,像apache Common Deamon(prunsrv)包装的windows服务一样工作,但是我有两个问题: 1.使用交互式桌面配置的服务可以查看摆动对话框并尝试从应用程序中 ...

  8. C#控制台程序注册成Windows服务

    在控制台程序中新增项目-->"Windows服务" 修改名称,我这里叫"Test_WindowsService" 然后在新增的"Windows服 ...

  9. Springboot打包后台运行及注册成Windows服务

    jar后台执行 新建bat文件,将下面文件拷贝到bat文件中,并保存. @echo off start javaw -jar xxx.jar exit 双击运行即可. 由于采用javaw运行,没有命令 ...

最新文章

  1. GetLastError()函数返回值及含义
  2. 湖南雅礼培训 1.1
  3. Python基础——PyCharm版本——第二章、数据类型和变量(超详细)
  4. python items函数用法,Python中dictionary items()系列函数的用法实例
  5. c 子类对象 访问父类对象受保护成员_面向对象编程(OOP)
  6. 信息学奥赛一本通(1253:抓住那头牛)
  7. 设置 cookie过期时间
  8. nfs 跟rpcbind的关系
  9. SPSS modeler for mac安装教程
  10. ubuntu 20 解决软件商店不可用问题
  11. 微信支付的商户号和服务商的区别,以及什么是子账户
  12. 6 安卓高德地图错误代码_高德开放平台
  13. 报错No protocol specified解决办法
  14. 新浪微博批量取消关注
  15. 网站证书过期导致WordPress后台无法登录问题解决方法
  16. 五月集训-14【栈】
  17. AUC的相关知识及K-S曲线和K-S值介绍
  18. 最简单判断工作日/节假日API
  19. python抓取天猫店铺归属信息地址(扫码登录)@灵魂走风的江湖
  20. 11台计算机的英语,计算机常见英语词汇

热门文章

  1. c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
  2. 安装php独立环境,0507-php独立环境的安装与配置 Web程序 - 贪吃蛇学院-专业IT技术平台...
  3. java订单类_基于Java创建一个订单类代码实例
  4. 深度linux内核升级,深度操作系统 2020.11.11 更新发布:内核升级
  5. c++生成光栅条纹程序_共享屋:一文让你认识光栅尺和编码器
  6. dev 中 gridcontrol1 滚动条重绘_浏览器的重绘和回流(Repaint amp; Reflow)
  7. Angular之ngx-permissions的角色管理
  8. Problem D: 链表的基本运算(线性表)
  9. 2018.10.29-2018.11.4
  10. python测试工具开发面试宝典3web抓取