JavaService.exe注冊的windows服務無法啟動問題


  最近開發了個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下載地址:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM