Windows 服務是後台長運行任務的標準載體。本文覆蓋 VS 專案模板創建、屬性配置、核心方法重寫、安裝程序添加、構建部署、命令行安裝/卸載、生產環境調試技巧 (附加進程、虛擬服務調試 OnStart) 的完整工程化指南。
System.ServiceProcess、繼承 ServiceBase、預置重寫方法。CanStop/CanPauseAndContinue/CanShutdown/CanHandlePowerEvent:啟用對應控制命令。AutoLog=true (預設):自動記錄啟動/停止/暫停等事件到應用程序日志。
private Thread _workerThread;
public MyService()
{
InitializeComponent();
_workerThread = new Thread(WorkerLoop) { IsBackground = true };
}
protected override void OnStart(string[] args) => _workerThread.Start();
protected override void OnStop() { _workerThread.Abort(); _workerThread.Join(); } // 優雅停止
protected override void OnPause() => _workerThread.Suspend(); // 注意: Suspend/Resume 已過時, 建議用標誌位協調
protected override void OnContinue() => _workerThread.Resume();
private void WorkerLoop()
{
while (true)
{
// 處理任務: 輪詢隊列、執行作業...
Thread.Sleep(5000); // 模擬間隔
}
}
ProjectInstaller.cs。ServiceProcessInstaller (設置 Account=LocalSystem/User) 和 ServiceInstaller (設置 ServiceName, StartType=Automatic/Manual, ServicesDependedOn 依賴服務)。.exe。# 安裝 (需管理員權限)
installutil MyService.exe
# 卸載
installutil /u MyService.exe
痛點:服務必須在 SCM (服務控制管理器) 上下文運行,無法直接 F5 調試;OnStart 30 秒超時限制極難調試啟動邏輯。
MyService.exe → Attach (托管代碼)。OnStart 中 Thread.Sleep(Timeout.Infinite))。OnStart 邏輯 (手動實例化真實服務類調用 OnStart)。服務調試核心:分離「進程生命週期」與「業務邏輯調試」。虛擬服務法完美繞過 30 秒啟動超時與 SCM 耦合,是調試 Windows Service 啟動邏輯的終極武器。