Windows 服務能在無使用者登入、系統啟動時即自動執行,適合後台監控、資料同步等長期任務。本文以 ATL COM AppWizard 為基礎,示範建立服務專案、註冊/安裝技巧,並加入「每 2 秒遞增計數並寫入應用程式事件日誌」的範例功能。
CServiceModule 類別,全域變數 _Module 為其實例。_tWinMain:進入點,支援命令列參數 /RegServer(元件註冊)、/Service(服務註冊)、/UnRegServer(移除)。Run():服務主迴圈,業務邏輯由此擴充。Install():呼叫 CreateService 向 SCM 註冊,第 6 參數 SERVICE_DEMAND_START(手動)可改 SERVICE_AUTO_START(自動),第 11 參數可指定相依服務(如 _T("MSSQLSERVER\0"))。專案屬性 → Custom Build 步驟加入:"$(TargetPath)" /Service。每次編譯後自動完成服務註冊,省去手動切換命令列。
CServiceModule 加入 int n;,Init() 中歸零。Adder():遞增 n 並呼叫 LogEvent 寫入系統日誌。CString 未定義:專案屬性雖設「Use MFC in Static Library」但未含標頭。在 StdAfx.h 的 #include <atlbase.h> 前加入 #include <afx.h> 即可。Run() 訊息迴圈前插入:SetTimer(NULL, 1, 2000, (TIMERPROC)OnTimerProc);VOID CALLBACK OnTimerProc(HWND, UINT, UINT_PTR, DWORD) { _Module.Adder(); }ServiceDemo。| API | 用途 |
|---|---|
CreateService | 向 SCM 註冊服務 |
SetTimer | 建立週期性定時器 |
LogEvent | 寫入 Windows 事件日誌 |
AdjustTokenPrivileges | 提升權限(OpenProcess 失敗時) |
掌握 ATL 服務架構後,即可將任意後台邏輯封裝為高可靠度的系統服務。