EasyServiece: Windows 系統服務註冊及管理工具

介紹

如果你的 Windows 程序需要在開機後用戶登錄之前就開始運行、且在用戶註銷之後也不停止,那麼你需要將程序註冊爲一個系統服務。

然而,在 Windows 下編寫一個可註冊爲系統服務的程序並不是一件簡單的事情。首先,程序必須是二進制的可執行程序,這就排除了腳本語言和虛擬機語言;其次,程序必須按系統服務的格式編寫,編寫過程繁瑣,編寫示例可見:MS 官方文檔

EasyService 是一個可以將常規程序註冊爲系統服務的工具。你可以按常規的方法編寫程序,然後用 EasyService 註冊爲一個系統服務,這樣你的程序就可以在開機後用戶登錄之前自動運行、且在用戶註銷之後也不會停止。

如果你需要在 Windows Server 下部署網站、Api 等服務, EasyService 將是一個很有用的工具。

系統要求

EasyService 需要 .NetFramework 4.0 (大部分 Windows 系統都已自帶)。可嘗試運行 worker/sample-worker.exe ,如果正常運行,則表明系統中已安裝 .NetFramework 4.0 。

使用方法

(1) 編寫、測試你的程序,EasyService 對程序僅有以下兩點要求:


a. 程序應持續運行


b. 當程序的標準輸入接收到 “exit” 後應在 10 秒之內退出

典型的程序見 worker/index.js (nodejs 版), worker/main.py (python 版) 或 src/SampleWorker.cs (C# 版)。

(2) 下載 源碼及程序,解壓。

(3) 打開 svc.conf 文件,修改配置:


# Windows 系統服務名稱、不能與系統中已有服務重名

ServiceName: An Easy Service


# 需要運行的可執行程序及命令行參數

Worker: node index.js


# 程序運行的工作目錄

WorkingDir: worker


# 輸出目錄,程序運行過程的輸出將會寫到這個目錄下面

OutFileDir: outfiles


# 程序輸出的編碼,如果不確定,請設爲空或 none

WorkerEncoding: utf8

(4) 在 svc.exe 所在的目錄下打開命令行窗口:

a. 運行 svc check 命令檢查配置是否合法

b. 運行 svc test-worker 命令測試 Worker 程序是否能正常運行

若測試無誤:

c. 運行 svc install 命令註冊並啓動系統服務,此時你的程序就已經開始運行了,即便用戶註銷也不會停止運行,且系統開機後、用戶登錄之前就會自動運行。在服務管理控制檯中可以查看已註冊的服務。

d. 運行 svc stop|start|restart|remove 停止、啓動、重啓或刪除本系統服務。

內部實現

EasyService 實質是將自己(svc.exe)註冊爲一個系統服務,此服務啓動時,會讀取 svc.conf 中的配置,創建一個子進程運行 Worker 中指定的程序及命令行參數,之後,監視該子進程,如果發現子進程停止運行,會重新啓動一個子進程。而當此服務停止時,會向子進程的標準輸入中寫入數據 “exit” ,並等待子進程退出,如果等待時間超過 10 秒,則直接終止子進程。

EasyService 源碼見 src/main.cs

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