用winsw讓任何Windows程序都能運行爲服務

winsw介紹

有時候我們需要在Windows下開機運行某些程序,這對於有圖形界面的程序來說一般不是什麼事,在選項中選中開機啓動,然後它們就可以自動運行了。但是如果我們想運行一些命令行程序的話就沒這麼方便了。

原來我的做法是寫一個bat腳本,然後將它的快捷方式複製到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp,這樣就可以開機自啓了。不過這種方式有一個非常大的缺點,就是開機之後會顯示一個命令行窗口!而且這個窗口還不能關,一關程序就停了。

其實Windows自帶了一個後臺程序管理的功能,就是我們經常用到的服務。但是Windows的服務只有程序的開發者在寫程序的時候引用到這個功能,我們才能利用服務來控制程序的啓動和關閉。對於一般的命令行程序來說,沒辦法利用服務。所以今天我們就來使用一下標題的這個winsw。它可以將Windows上的任何一個程序註冊爲服務,如果不需要,也可以方便的卸載服務。

使用winsw

下載

首先要下載winsw。它是一個單個的可執行文件,我們到Github release這裏就可以下載winsw了。一般來說當然是下載最新的。winsw可以運行在.NET2和.NET4兩個版本上,當然如果使用Win10等比較新的系統,最好下載更新版本的.NET。

下載完之後最好把文件改成一個比較短小的名字,例如winsw.exe這樣的,方便後面輸入命令。

編寫配置文件

我們需要編寫一個和程序同名的XML文件作爲winsw的配置文件。文件大體上長這樣,這是官網的例子。

    <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的標籤名,我想大家也能猜到這些參數是幹嘛的,所以我就不介紹了。下面是我的一個配置文件例子。

<service>
    <id>kcp</id>
    <name>kcp</name>
    <description>這個服務用來將ss使用kcp協議加速</description>
    <executable>client_windows_amd64</executable>
    <arguments>-c kcp-config.json</arguments>
    <logmode>reset</logmode>
</service>

註冊服務

編寫好配置文件之後,記得把配置文件和可執行文件放在一起,這樣winsw才能正確識別配置文件。然後我們打開一個管理員權限的命令提示符或Powershell窗口,然後輸入下面的命令,如果返回值爲0,說明已將程序註冊爲服務。

winsw install
  • 1
  • 1

然後打開Windows的服務,我們可以看到這下已經出現了註冊的服務,我們可以像一般服務那樣開啓、關閉它。

服務

如果不再需要這個服務,使用winsw uninstall即可卸載服務。當然還有諸如startstop這樣的命令啓動和關閉服務。更重要的是,沒有那個既不美觀又煩人的命令提示符窗口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章