winsw介紹
有時(shí)候我們需要在Windows下開機(jī)運(yùn)行某些程序负乡,這對(duì)于有圖形界面的程序來說一般不是什么事盯仪,在選項(xiàng)中選中開機(jī)啟動(dòng)羔味,然后它們就可以自動(dòng)運(yùn)行了卡辰。但是如果我們想運(yùn)行一些命令行程序的話就沒這么方便了霹疫。
原來我的做法是寫一個(gè)bat腳本拱绑,然后將它的快捷方式復(fù)制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
,這樣就可以開機(jī)自啟了丽蝎。不過這種方式有一個(gè)非常大的缺點(diǎn)欺栗,就是開機(jī)之后會(huì)顯示一個(gè)命令行窗口!而且這個(gè)窗口還不能關(guān)征峦,一關(guān)程序就停了。
其實(shí)Windows自帶了一個(gè)后臺(tái)程序管理的功能消请,就是我們經(jīng)常用到的服務(wù)栏笆。但是Windows的服務(wù)只有程序的開發(fā)者在寫程序的時(shí)候引用到這個(gè)功能,我們才能利用服務(wù)來控制程序的啟動(dòng)和關(guān)閉臊泰。對(duì)于一般的命令行程序來說蛉加,沒辦法利用服務(wù)。所以今天我們就來使用一下標(biāo)題的這個(gè)winsw缸逃。它可以將Windows上的任何一個(gè)程序注冊(cè)為服務(wù)针饥,如果不需要,也可以方便的卸載服務(wù)需频。
使用winsw
下載
首先要下載winsw丁眼。它是一個(gè)單個(gè)的可執(zhí)行文件,我們到Github release這里就可以下載winsw了昭殉。一般來說當(dāng)然是下載最新的苞七。winsw可以運(yùn)行在.NET2和.NET4兩個(gè)版本上,當(dāng)然如果使用Win10等比較新的系統(tǒng)挪丢,最好下載更新版本的.NET蹂风。
下載完之后最好把文件改成一個(gè)比較短小的名字,例如winsw.exe
這樣的乾蓬,方便后面輸入命令惠啄。
編寫配置文件
我們需要編寫一個(gè)和程序同名的XML文件作為winsw的配置文件。文件大體上長(zhǎng)這樣任内,這是官網(wǎng)的例子撵渡。
<service>
<id>jenkins</id>
<name>Jenkins</name>
<description>This service runs Jenkins continuous integration system.</description>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
<logmode>rotate</logmode>
</service>
看到XML的標(biāo)簽名,我想大家也能猜到這些參數(shù)是干嘛的死嗦,所以我就不介紹了姥闭。下面是我的一個(gè)配置文件例子。
<service>
<id>kcp</id>
<name>kcp</name>
<description>這個(gè)服務(wù)用來將ss使用kcp協(xié)議加速</description>
<executable>client_windows_amd64</executable>
<arguments>-c kcp-config.json</arguments>
<logmode>reset</logmode>
</service>
注冊(cè)服務(wù)
編寫好配置文件之后越走,記得把配置文件和可執(zhí)行文件放在一起棚品,這樣winsw才能正確識(shí)別配置文件靠欢。然后我們打開一個(gè)管理員權(quán)限的命令提示符或Powershell窗口,然后輸入下面的命令铜跑,如果返回值為0门怪,說明已將程序注冊(cè)為服務(wù)。
winsw install
然后打開Windows的服務(wù)锅纺,我們可以看到這下已經(jīng)出現(xiàn)了注冊(cè)的服務(wù)掷空,我們可以像一般服務(wù)那樣開啟、關(guān)閉它囤锉。
如果不再需要這個(gè)服務(wù)坦弟,使用winsw uninstall
即可卸載服務(wù)。當(dāng)然還有諸如start
官地、stop
這樣的命令啟動(dòng)和關(guān)閉服務(wù)酿傍。更重要的是,沒有那個(gè)既不美觀又煩人的命令提示符窗口驱入。