首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

用 XYNTService 讓 Windows 程式以 NT 服務身分運行

     編輯:關於VC++

前言

傳統的 NT 服務屬於主控台應用程式,沒有訊息迴圈,能在使用者登入前啟動,登出後仍持續執行。但許多既有的 ActiveX 元件難以在主控台程式中使用。相反地,MFC 或 Visual Basic 程式屬於 Windows 應用程式,使用 ActiveX 元件相當容易。若能讓這類 Windows 程式具備 NT 服務的特性——在使用者登入前啟動、登出後持續執行——將極具實用價值。

雖然可以直接撰寫 Windows 服務程式,但本文提供一個更簡單的解決方案:XYNTService。這是一個簡易的 NT 服務程式,能啟動並管理多個外部程式,使它們像服務一樣在背景運行。您只需安裝服務並修改 XYNTService.ini 設定檔即可。

XYNTService 的優勢

  • 可啟動任意數量的指定程式,這些程式將如同 NT 服務般在背景運行,無需使用者登入。
  • 在缺乏適當權限時,使用者無法終止由服務啟動的程式(除非關機)。
  • 開發階段可在除錯器中直接測試程式(如 DevStudio),除錯完成後再設定為由 NT 服務啟動。

安裝與移除

在命令提示字元下執行:

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

主要區段與屬性

  • ServiceName:服務名稱,預設為 XYNTService。若將執行檔與 ini 檔複製到不同目錄,修改此值即可安裝另一個服務實例。
  • ProcCount:要啟動的程式數量,對應 [Process0]、[Process1] 等區段。
  • CheckProcess:檢查啟動程式是否存活的間隔(分鐘)。設為 0 表示不檢查;預設 60 分鐘。若程式的 Restart=Yes,服務會在檢查到程式結束時自動重啟。
  • WorkingDir:程式的工作目錄,未指定時預設為 X:\winnt\system32。
  • PauseStart:啟動程式後等待的毫秒數,預設 100 ms。適用於後續程式需依賴前一個程式初始化完成的情況。
  • PauseEnd:服務關閉時,發送 WM_QUIT 後等待呼叫 TerminateProcess 的毫秒數,預設 100 ms,給程式清理資源的機會。
  • UserInterface:控制登入使用者是否可見程式視窗。僅在服務以 Local System 帳戶執行時生效(預設)。若需存取使用者設定,可在控制台服務屬性中指定特定使用者帳戶執行。
  • Restart:程式意外結束時是否自動重啟,預設 No。

進階指令

  • XYNTService -b <index>:重新啟動 ini 中指定索引的程式(如 -b 2 重啟 Process2)。
  • XYNTService -r <ServiceName>:啟動其他服務。
  • XYNTService -k <ServiceName>:停止其他服務。

所有錯誤會記錄在與執行檔同目錄的日誌檔中,錯誤碼為 GetLastError 回傳的十進制數值,可查閱 MSDN 了解詳情。

結語

XYNTService 讓現有的 Windows 應用程式以零修改方式獲得服務特性,大幅降低開發與部署門檻。原始碼開放免費使用與修改,歡迎開發者根據需求擴充功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved