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

.NET Windows Service 開發全流程:從創建、安裝到調試的工程化實踐

     編輯:關於.NET

Windows 服務是後台長運行任務的標準載體。本文覆蓋 VS 專案模板創建、屬性配置、核心方法重寫、安裝程序添加、構建部署、命令行安裝/卸載、生產環境調試技巧 (附加進程、虛擬服務調試 OnStart) 的完整工程化指南。

創建與核心配置

  1. 專案模板:「Windows Service」自動引用 System.ServiceProcess、繼承 ServiceBase、預置重寫方法。
  2. ServiceName:設置唯一服務名,**必須與安裝類中一致**。
  3. 關鍵屬性:
    • 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); // 模擬間隔
    }
}

安裝程序:Installer 類

  1. 右鍵專案 → Add Installer,生成 ProjectInstaller.cs。
  2. 設計器拖入 ServiceProcessInstaller (設置 Account=LocalSystem/User) 和 ServiceInstaller (設置 ServiceName, StartType=Automatic/Manual, ServicesDependedOn 依賴服務)。
  3. 構建輸出 .exe。

命令行安裝與卸載

# 安裝 (需管理員權限)
installutil MyService.exe

# 卸載
installutil /u MyService.exe

調試藝術:附加進程與虛擬服務技巧

痛點:服務必須在 SCM (服務控制管理器) 上下文運行,無法直接 F5 調試;OnStart 30 秒超時限制極難調試啟動邏輯。

標準調試流程

  1. 安裝並啟動服務 (SCM/服務管理器/代碼)。
  2. VS → Debug → Attach to Process → 勾選 "Show system processes" → 找到 MyService.exe → Attach (托管代碼)。
  3. 下斷點,通過 SCM 發送 Stop/Pause/Continue 觸發斷點。

調試 OnStart 的「虛擬服務」大招

  1. 同方案新建一個極簡「虛擬服務」專案 (僅 OnStart 中 Thread.Sleep(Timeout.Infinite))。
  2. 安裝並啟動「虛擬服務」 → 進程啟動並駐留。
  3. VS Attach 到該進程 → 現在可隨意斷點調試**真實服務**的 OnStart 邏輯 (手動實例化真實服務類調用 OnStart)。
  4. 調試完成移除虛擬服務。

服務調試核心:分離「進程生命週期」與「業務邏輯調試」。虛擬服務法完美繞過 30 秒啟動超時與 SCM 耦合,是調試 Windows Service 啟動邏輯的終極武器。

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