1. 下載Winsw
https://github.com/winsw/winsw/releases
下載winsw官網上的xml文件和.exe文件
2. 編輯配置文件
創建一個文件夾demo,將所需要轉換的jar包,和這兩個文件放在一起,並且將.exe的文件名修改和.xml文件一樣,比如test.exe和test.xml
xml的可選項
<!--
這是Windows服務包裝器的一個配置示例。
此配置文件應放在WinSW.exe同目錄,名稱應相同。
例如,對於myapp.exe,配置文件名應為myapp.xml。
更多信息:https://github.com/kohsuke/winsw/blob/master/doc/xmlconfigfile.md
-->
<configuration>
<!--
SECTION: 必填項
-->
<!-- 服務ID,在windows系統中必須唯一 -->
<id>myapp</id>
<!-- 服務顯示名稱,只能英文和數字 -->
<name>MyApp Service (powered by WinSW)</name>
<!-- 服務描述,只能英文和數字 -->
<description>This service is a service cratead from a sample configuration</description>
<!-- 啟動可執行文件的路徑 -->
<executable>%BASE%\myExecutable.exe</executable>
<!--
SECTION: 安裝
這些選項僅在安裝時有效。修改配置后,必須重新安裝服務才能生效。
-->
<!--
OPTION: serviceaccount
定義運行服務的賬號。
-->
<!--
<serviceaccount>
<domain>YOURDOMAIN</domain>
<user>useraccount</user>
<password>Pa55w0rd</password>
<allowservicelogon>true</allowservicelogon>
</serviceaccount>
-->
<!--
OPTION: onfailure
定義一系列操作,如果托管的可執行文件失敗,則順序執行這些操作。
支持的操作:restart,reboot,none
-->
<!--
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="20 sec"/>
<onfailure action="reboot" />
-->
<!--
OPTION: resetfailure
windows服務重置故障狀態的時間。
默認值 1 day
-->
<!--
<resetfailure>1 hour</resetfailure>
-->
<!--
SECTION: 執行管理配置
-->
<!--
OPTION: arguments
傳遞給可執行文件的參數。
-->
<!--
<arguments>-classpath c:\cygwin\home\kohsuke\ws\hello-world\out\production\hello-world test.Main</arguments>
-->
<!--
OPTION: startarguments
可執行文件啟動參數。
如果配置,則覆蓋"arguments"
-->
<!--
<startarguments></startarguments>
-->
<!--
OPTION: workingdirectory
如果指定,則設置可執行文件的默認工作目錄。
默認值:服務包裝的可執行文件的目錄
-->
<!--
<workingdirectory>C:\myApp\work</workingdirectory>
-->
<!--
OPTION: priority
所需的進程優先級。
可設置的值:Normal, Idle, High, RealTime, BelowNormal, AboveNormal
默認值:Normal
-->
<priority>Normal</priority>
<!--
OPTION: stoptimeout
強制終止可執行文件之前,嘗試正常關閉的等待時間。
默認值:15 seconds
-->
<stoptimeout>15 sec</stoptimeout>
<!--
OPTION: stopparentprocessfirst
如果設置為true,在停止子進程之前終止父進程。
默認值:false
-->
<stopparentprocessfirst>false</stopparentprocessfirst>
<!--
OPTION: stopexecutable
執行關閉服務的可執行文件路徑。
只有配置了"stoparguments"時,才使用此配置。如果沒有則用"executable"關閉服務
-->
<!--
<stopexecutable>%BASE%\stop.exe</stopexecutable>
-->
<!--
OPTION: stoparguments
終止服務時,傳遞給"stopexecutable"的附加參數
此選項還允許通過停止可執行文件終止可執行文件
-->
<!--
<stoparguments>-stop true</stoparguments>
-->
<!--
SECTION: 服務管理
-->
<!--
OPTION: startmode
定義服務的啟動模式
支持的模式:Automatic, Manual, Boot, System (latter ones are supported for driver services only)
默認模式:Automatic
-->
<startmode>Automatic</startmode>
<!--
OPTION: delayedAutoStart
如果在"startmode"配置了"Automatic",則啟用延遲自動啟動。
請參閱Winsw文檔以獲取有關支持的平台版本和限制的信息。
-->
<!--
<delayedAutoStart/>
-->
<!--
OPTION: depend
在本服務啟動之前啟動的服務。
-->
<!--
<depend>Eventlog</depend>
<depend>W32Time</depend>
-->
<!--
OPTION: waithint
掛起停止操作所需的時間
在指定的時間段過去之前,服務應該下次調用setServiceStatus函數。
否則服務將被標記為無響應
默認值:15 seconds
-->
<waithint>15 sec</waithint>
<!--
OPTION: sleeptime
服務下次調用setServiceStatus函數之前的時間。
不要超過"waithint"。建議間隔是"waithint"的十分之一,但不小於1秒,也不大於10秒。
默認值:1 second
-->
<sleeptime>1 sec</sleeptime>
<!--
OPTION: interactive
指示服務可以與桌面交互。
-->
<!--
<interactive/>
-->
<!--
SECTION: 日志記錄
-->
<!--
OPTION: logpath
為服務包裝程序生成的所有日志設置自定義日志目錄。
默認值:包含執行器的目錄
-->
<!--
<logpath>%BASE%\logs</logpath>
-->
<!--
OPTION: log
為可執行文件生成的日志定義日志記錄模式。
支持的模式:
* append - 追加到現有日志
* none - 不保存日志
* reset - 啟動時擦除日志
* roll - 根據大小自動循環分割日志
* roll-by-time - 根據日期循環分割日志
默認模式: append
每種模式都有不同的設置。https://github.com/kohsuke/winsw/blob/master/doc/loggingAndErrorReporting.md
-->
<log mode="append">
<!--
<setting1/>
<setting2/>
-->
</log>
<!--
SECTION: 環境設置
-->
<!--
OPTION: env
設置或重寫環境變量。
頂層可能配置了多個條目。
-->
<!--
<env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" />
<env name="LM_LICENSE_FILE" value="host1;host2" />
-->
<!--
OPTION: download
啟動前由包裝器執行的下載列表。
-->
<!--
<download from="http://www.google.com/" to="%BASE%\index.html" />
下載並在出現錯誤時使服務啟動失敗:
<download from="http://www.nosuchhostexists.com/" to="%BASE%\dummy.html" failOnError="true"/>
由於連接未加密而導致基本身份驗證不安全的示例:
<download from="http://example.com/some.dat" to="%BASE%\some.dat"
auth="basic" unsecureAuth=“true”
username="aUser" password=“aPassw0rd" />
通過HTTPS安全基本身份驗證
<download from="https://example.com/some.dat" to="%BASE%\some.dat"
auth="basic" username="aUser" password="aPassw0rd" />
當目標服務器和客戶端是同一域的成員,並且客戶端域屬於具有信任的域時,安全身份驗證:
<download from="https://example.com/some.dat" to="%BASE%\some.dat" auth="sspi" />
-->
<!--
SECTION: 其他選項
-->
<!--
OPTION: beeponshutdown
指示服務在關閉時(如果操作系統支持)應發出嘟嘟聲。
-->
<!--
<beeponshutdown/>
-->
<!--
SECTION: 擴展
此配置部分允許指定自定義擴展。
更多信息請訪問:https://github.com/kohsuke/winsw/blob/master/doc/extensions/extensions.md
-->
<!--
<extensions>
Extension 1: id values must be unique
<extension enabled="true" id="extension1" className="winsw.Plugins.SharedDirectoryMapper.SharedDirectoryMapper">
<mapping>
<map enabled="false" label="N:" uncpath="\\UNC"/>
<map enabled="false" label="M:" uncpath="\\UNC2"/>
</mapping>
</extension>
...
</extensions>
-->
</configuration>
3.示例xml文件
<service>
<id>demo</id>
<name>demo</name>
<description>This is HelloWorld service.</description>
<executable>D:\jdk1.8.0_202\bin\java.exe</executable>
<arguments>-jar D:\demo\demo.jar</arguments>
<startmode>Automatic</startmode>
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</service>
# 直接使用系統變量的寫法
<service>
<id>demo</id>
<name>demo</name>
<description>winsw將jar包注冊為windows服務demo</description>
<env name="JAVA_HOME" value="%JAVA_HOME%"/>
<executable>java</executable>
<arguments>-jar D:\demo\demo.jar</arguments>
<startmode>Automatic</startmode>
<logpath>%BASE%\log</logpath>
<logmode>rotate</logmode>
</service>
name與description是注冊到windows服務后的名稱與描述,
env配置讀取windows配置的java環境變量,
executable與arguments里面的內容拼接起來就是我們平常使用的啟動jar包的命令,
arguments中配置各種啟動參數,jar包路徑使用絕對路徑,相對路徑需要配置環境變量像JAVA_HOME那樣使用env標簽讀取,
startmode設置為windows開機自啟動,如果不需要開機自啟可以去掉這個標簽,
logpath設置日志輸出路徑,這里也是使用絕對路徑輸出到logs文件夾,
log標簽內配置日志模式
4. 運行test.exe文件
# 在命令行窗口執行如下命令
test.exe install
注:圖示使用的服務是demo1,供展示
5.刪除服務
使用管理員權限打開命令行窗口,執行如下命令
sc delete demo
6.設置程序啟動
上述步驟是設置程序開機自啟動,但是服務未啟動,結合bat文件來實現
# demo.bat
@echo.服務啟動......
@echo off
@sc create demo binPath= "D:\demo\test.exe"
@net start demo
@sc config demo start= AUTO
@echo off
@echo.啟動完畢!
@pause
7.匯總
若是有第6步操作,則直接執行demo.bat文件即可,就不用再執行test.exe install
這一步了
這樣一來就實現了windows系統下把jar程序注冊成服務,服務開啟,並且服務開機自啟動等。
8.日志
由配置文件可知,日志是在當前目錄下的log文件夾下,里面有三個log文件
test.wrapper.log是winsw程序日志
test.out.log 是jar程序本身運行的日志
9.補充
服務重啟的方式:
第一種是通過命令行的方式:
net stop mysql
net start mysql
第二種是服務功能
windows+R, 輸入: services.msc,找到對應的服務來操作