Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4190504
  • 博文数量: 882
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8528
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
  • 认证徽章:
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(882)

文章存档

2019年(39)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Java

2019-11-06 09:44:41

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

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

点击(此处)折叠或打开

  1. package com.example; import java.time.LocalDateTime; public class demo { public static void main(String[] args) { do {
  2.             System.out.println(LocalDateTime.now()); try {
  3.                 Thread.sleep(1000);
  4.             } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();
  5.             }
  6.         } while (true);

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

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

点击(此处)折叠或打开

  1. 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
  2. The test automatic service was successfully installed

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

点击(此处)折叠或打开

  1. C:\Users\xxx\Desktop\JavaService-2.0.10>net start test
  2. test 服务正在启动 .
  3. test 服务无法启动。

  4. 服务没有报告任何错误。

  5. 请键入 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下载地址:

  http://download.forge.ow2.org/javaservice/

阅读(28) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册