傳統的 NT 服務屬於主控台應用程式,沒有訊息迴圈,能在使用者登入前啟動,登出後仍持續執行。但許多既有的 ActiveX 元件難以在主控台程式中使用。相反地,MFC 或 Visual Basic 程式屬於 Windows 應用程式,使用 ActiveX 元件相當容易。若能讓這類 Windows 程式具備 NT 服務的特性——在使用者登入前啟動、登出後持續執行——將極具實用價值。
雖然可以直接撰寫 Windows 服務程式,但本文提供一個更簡單的解決方案:XYNTService。這是一個簡易的 NT 服務程式,能啟動並管理多個外部程式,使它們像服務一樣在背景運行。您只需安裝服務並修改 XYNTService.ini 設定檔即可。
在命令提示字元下執行:
XYNTService -i // 安裝服務
XYNTService -u // 移除服務
預設情況下,服務會在電腦重新開機時自動啟動。也可透過控制台的「服務」圖示手動啟動/停止。
XYNTService.ini 詳細說明設定檔需與 XYNTService.exe 放在同一目錄。範例如下:
[Settings]
ServiceName = XYNTService
ProcCount = 3
CheckProcess = 30
[Process0]
CommandLine = c:\MyDir\XYRoot.exe
WorkingDir = c:\MyDir
PauseStart = 1000
PauseEnd = 1000
UserInterface = Yes
Restart = Yes
[Process1]
CommandLine = c:\MyDir\XYDataManager.exe
WorkingDir = c:\MyDir
PauseStart = 1000
PauseEnd = 1000
UserInterface = Yes
Restart = Yes
[Process2]
CommandLine = java XYRoot.XYRoot XYRootJava.ini
UserInterface = No
Restart = No
[Process0]、[Process1] 等區段。Restart=Yes,服務會在檢查到程式結束時自動重啟。X:\winnt\system32。WM_QUIT 後等待呼叫 TerminateProcess 的毫秒數,預設 100 ms,給程式清理資源的機會。XYNTService -b <index>:重新啟動 ini 中指定索引的程式(如 -b 2 重啟 Process2)。XYNTService -r <ServiceName>:啟動其他服務。XYNTService -k <ServiceName>:停止其他服務。所有錯誤會記錄在與執行檔同目錄的日誌檔中,錯誤碼為 GetLastError 回傳的十進制數值,可查閱 MSDN 了解詳情。
XYNTService 讓現有的 Windows 應用程式以零修改方式獲得服務特性,大幅降低開發與部署門檻。原始碼開放免費使用與修改,歡迎開發者根據需求擴充功能。