最近有個技術需求,要把已寫好的Java程序註冊成Windows服務,網上搜了兩個快捷辦法,一個是Java Service Wrapper,這是個收費的第三方組件,免費的版本尚未適合64位Win7系統的,因此我就嘗試了第二個辦法——JavaService。java
雖然JavaService的版本從網上搜來的比較老,配置過程還不算太麻煩。但是我整了一天,嘗試了網上的各類說法,這個JavaService老是提示服務註冊成功,可是啓動老是失敗。好不容易有一次把日誌報錯文件整出來了,從中發現原來項目封裝成的可執行jar包中找不到某個類,上網搜了搜,咱們在用Eclipse打包項目時,應該選擇將引用的jar包中的類抽出到本身的項目中。OK,那這個問題解決了,結果一運行果斷成功,可是,我想着把服務註冊命令給精簡一下吧,結果這麼一改,又啓動失敗了,並且一直日誌文件也沒出來,說明JavaService自身在運行時就出問題了。結果在Google裏搜索發現,原來是指定的JDK路徑中有空格的緣由。下面貼出命令行中的命令:app
1 JavaService -install Client "%JAVA_HOME%"\jre\bin\server\jvm.dll -Djava.class.path=
"%JAVA_HOME%"\lib\tools.jar;D:\JavaService\client.jar 2 -start com.yx.util.Main -out D:\JavaService\Logs\stdout.log -err D:\JavaServer\logs\stderr.log
這是我最開始的服務註冊命令,命令中的各個參數就再也不描述了,你們能夠問「百老師」,說的很詳細了。直接說上面命令中存在的問題,首先解決JDK路徑中有空格的辦法是加引號,而這裏%JAVA_HOME%是讀不出來的,即便使用"%JAVA_HOME%"\jre\bin\server\jvm.dll"這種寫法也無濟於事,不過你們能夠嘗試一下設置路徑中沒有空格的%JAVA_HOME%,看看"%JAVA_HOME%"這種寫法是否起做用。因爲本人機器上的JDK已經安裝過了,因此就再也不折騰了。jvm
好了,展現一下正確的、起做用的命令:spa
1 JavaService -install Client "C:\Program Files (x86)\Java\jdk1.7.0\jre\bin\server\jvm.dll" -Djava.class.path=
"C:\Program Files (x86)\Java\jdk1.7.0\lib\tools.jar;D:\JavaService\client.jar" 2 -start com.yx.util.Main -out D:\JavaService\Logs\stdout.log -err D:\JavaServer\logs\stderr.log
從上面的命令能夠看出,我是把"%JAVA_HOME%"替換成了絕對路徑,並將整個參數值用引號引了起來。這樣服務就能夠正常啓動了。命令行