
用 .NET6 Worker
開發 Windows Service
在 Windows 系統中,Windows Service 是一種在背景執行的應用程式,可以在系統啟動時自動運行並持續運行,適合用於執行長時間或定期的任務。過去在 .NET Framework 上開發 Windows Service 專案,在偵錯上需要額外撰寫類似Console的程式來偵錯,而在 .NET 6 中,引入了 Worker Service 的概念,它提供了更簡潔和高效的方式來開發 Windows Service。本篇文章將介紹如何使用 .NET 6 Worker 開發 Windows Service,讓你能夠輕鬆地建立可靠的後台應用程式。
建立 .NET 6 Worker 專案
首先,我們需要建立一個 .NET 6 Worker 專案。打開 Visual Studio 或任何適用的編輯器,選擇建立新的專案,並選擇「Worker」範本。這將建立一個基本的 Worker Service 專案結構,包含 Program.cs 和 Worker.cs 檔案
安裝NuGet 套件
使用command或是Nuget套件管理員找到Microsoft.Extensions.Hosting.WindowsServices套件並安裝。

更新專案檔
新增<Nullable>enable<Nullable>
節點

設定 Windows Service
在 Program.cs 檔案中,我們新增了 UseWindowsService()
並設定了 ServiceName 為 ServiceSample1 , services.AddHostedService<Worker1>()
,指定了Worker的運行環境,由 Worker1 來設定 Worker 選項及生命週期事件(例如:設定 Worker 在收到關閉信號時進行優雅關閉)。
using Worker1;
using Microsoft.Extensions.Hosting;
IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options =>
{
options.ServiceName = "ServiceSample1";
})
.ConfigureServices(services =>
{
services.AddHostedService<Worker1>();
})
.Build();
await host.RunAsync();
在 Worker1.cs 檔案中,我們可以定義 Worker 類別,在 ExecuteAsync()
方法中,可以實現主要的工作邏輯,stoppingToken 會在服務 StopAsync()
時被呼叫。
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Service running at: {time}", DateTime.Now);
await Task.Delay(5000, stoppingToken);
}
}
除了 ExecuteAsync()
外,也可以視需求override StartAsync()
和 StopAsync()
方法來分別處理服務啟動即關閉時的邏輯。
除錯
Worker Service 專案的偵錯方式基本上跟 Console 專案是一樣的,直接 F5 開始偵錯即可,會顯示 Console 輸出 Log 訊息,另外因為 Worker Service 可以直接產出 .exe 的執行檔,所以也可以直接執行進行測試,之後安裝 Windows Service 也是直接利用產出的 .exe 執行檔進行喔。
發佈和安裝
完成程式碼的撰寫後,我們可以進行發佈並安裝 Windows Service。使用 dotnet CLI 或 Visual Studio 的發佈功能,將專案發佈為適用於 Windows 的執行檔。然後,使用命令提示字元以系統管理員權限執行以下命令安裝 Windows Service:
sc create <ServiceName> binPath= "<path to executable>"
啟動和管理 Windows Service
安裝完成後,可以使用以下命令啟動和管理 Windows Service:
sc start <ServiceName> // 啟動服務
sc stop <ServiceName> // 停止服務
sc delete <ServiceName> // 刪除服務
使用 .NET 6 Worker 提供了更簡潔高效的方式來建立背景應用程式,不需要在像以前額外寫 Console 專案來進行除錯。在本篇文章中,我們介紹了建立 .NET 6 Worker 專案、設定 Windows Service、發佈和安裝 Windows Service 的步驟。希望這篇文章能幫助你快速上手開發 Windows Service,並將其應用於你的專案中。