dotnet core(.NET 5も含む)のWorker ServiceをWindowsのServiceとして動作させる例を見つけたのでメモ。
Worker Serviceは下記コマンドで作成する。
dotnet new worker -o <プロジェクト名>
通常は、上記によって作成されたWorker.csに処理を付け加えればOKなのだが、Windows Service化させたい場合は、プロジェクトにMicrosoft.Extensions.Hosting.WindowsServicesパッケージを追加する必要がある。
dotnet add <プロジェクト名> package Microsoft.Extensions.Hosting.WindowsServices
さらに、Program.cs中のCreateHostBuilderに.UseWindowsService()を追加する。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
後は、Worker.csに処理を追加して、デバッグ後、下記コマンドでサービス登録を行う。(これはWindowsのコマンド)
sc create <サービス名> binPath= 実行ファイルパス [オプション...]
登録が済めば、MMCコンソールの「コンピューターの管理」-「サービスとアプリケーション」-「サービス」からも起動・停止や設定変更が可能。
単純なサービスの開始や停止は下記コマンドでも操作可能。
sc start <サービス名>
sc stop <サービス名>
.NET Framework時代のサービス作成より楽だね。
ピンバック: Linuxのsystemdでworkerアプリを動かす | 元技術者のぶーろぐ