bat文件啓動jar包做成Windows系統服務

此次項目使用的是Win7系統

at文件[含有啓動jar包]做成系統服務
Bat文件內容:

@echo off
cd d:/test/
echo in success!
ping 127.1 > test11log.txt
java -jar 1.jar


如果是雙擊bat文件是可以直接運行jar文件的
但是由於需要系統服務執行bat文件,所以系統必須配好Java環境變量
說一下我的環境變量的配置:
JAVA_HOME: C:\Program Files\Java\jdk1.6.0_26
CLASSPATH: %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
Path: C:\Program Files\Java\jdk1.6.0_26\bin;


第一步:
下載微軟系統小工具 instsrv.exe和srvany.exe至C:\Windows\System32。
第二步:
運行Dos命令代碼:instsrv ServiceName C:\Windows\System32\srvany.exe    
    (ServiceName 即你自己定義的服務名稱,可以是要作爲系統服務啓動的應用程序的名稱。) 
然後這樣執行的結果是:
Unable to find the file at the given path
在仔細檢查了參數之後,確定這是由於系統原因所引起的。
最終的原因在於,我們所使用的instsrv和srvany是32位的,而windows現在沒有相對應的64位相對應工具發佈。而程序本身是沒有問題的,問題在於我們將instsrv和Srvany放到windows/system32正面,而在64位系統中,這裏應該存放64位的程序,所以最終的解決問題很簡單。我們只需要將這兩個程序再copy至32位程序應該放置的地方,比如windows/sysWow64目錄,這樣就可以了。原先的相應步驟以及程序根本就不需要作任何改動。instsrv會自動地找到原先應該放在system32下的程序,而這個程序現在被放置在了SysWow64目錄下。
簡單一點的解決方法就是,將instsrv和srvany程序在windows/sysWow64目錄下再copy一份,相當於在system32和sysWow64下都有程序,這樣問題即解決。更底層的原因,也許只有微軟能解釋了,簡而言之,在64位系統下,32位程序是看不到放置在system32下面的程序的,而它應該訪問的system32目錄被系統映射到了sysWow64目錄下了,在運行時系統會自動地將相應的sysWow64目錄映射爲程序所認爲的system32。
參考文檔:http://en.wikipedia.org/wiki/WoW64


第三步:
    打開註冊表,定位到下面的路徑。 
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName 
    (同樣的ServiceName是你剛纔安裝服務時自定義的服務名稱。) 
    如果該服務名下沒有Parameters項目,則對服務名稱項目右擊新建項,名稱爲Parameters,然後定位到Parameters項,新建以下幾個字符串值。 
    名稱 Application 值爲你要作爲服務運行的BAT文件地址。 
    名稱 AppDirectory 值爲你要作爲服務運行的BAT文件所在文件夾路徑。 
    名稱 AppParameters 值爲你要作爲服務運行的BAT文件啓動所需要的參數。 [暫時沒配置]


注:instsrv ServiceName remove 命令可刪除服務。

發佈了109 篇原創文章 · 獲贊 17 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章