single.php

C# ワーカーサービスの実行ファイルがサービスで開始できない場合の対処法

Visual Studioの新しいプロジェクトで選択可能な[ワーカー サービス]で出力される実行可能ファイル(拡張子 .exe)をWindowsサービスから利用する方法を備忘録的に投稿します。

[エラー 1053 サービスを開始できません]

サービスを登録して開始すると表示される画面。

Windowsの他にLinuxやmacOSでも動作する実行ファイルですが、サービスで実行するとエラーとなり開始できません。

Windowsサービス化

Windowsのみで実行する限定であれば、NuGetパッケージの追加でサービス化が可能です。

具体的には次の手順で行います。

1.[ソリューション エクスプローラー]で[NuGet パッケージの管理]メニューで[Microsoft.Extensions.Hosting.WindowsServices]をインストールします。

2. [Program.cs]ファイルを編集して太字の部分を追加します。

using StreamDeckService;

// var builder = Host.CreateApplicationBuilder(args);
var builder = Host.CreateDefaultBuilder(args).ConfigureServices(services =>
{
  services.AddHostedService<Worker>();
})
.UseWindowsService();

var host = builder.Build();
host.Run();

3. プロジェクトを保存してビルドを行います。

プロジェクトの発行とサービス登録

サービスとして利用する実行ファイルを[発行]します。

デバッグ用にビルドした実行ファイルを使っても動きますが、サービスで実行中はデバッグ作業が出来なくなるので別ファイルとして発行しておいた方が無難です。

1.[プロジェクト]を右クリックして表示された[発行]メニューを選択します。

2. 表示された[公開]画面の[フォルダー]を選択します。

3. フォルダーの場所を確認して[完了]をクリックします。

4. 表示された[公開]画面の[発行]をクリックします。

5. 管理権限で[PowerShell(またはコマンドプロンプト]に、指定したフォルダーに作成された実行ファイル(拡張子 .exe)の場所を含めて、サービス登録のコマンドを実行します。

sc create <サービス名> binPath="[発行]画面で指定した実行ファイル(.exe)の場所"

6. [サービス]画面で登録を確認します。

7.[開始]メニューでサービスを開始します。

7. 状態が[実行中]になればワーカーサービスが実行されています。

登録したサービスを削除するには次のコマンドを入力します。(管理権限が必要なので注意してください)

sc delete <登録したサービス名>

まとめ

Visual Studioで[ワーカーサービス]プロジェクトで出力される実行可能ファイル(拡張子 .exe)をWindowsサービスから利用する際にサービスが開始されない場合の対処法について書きました。

ワーカーサービスをWindowsサービスとして利用するには、NuGet パッケージのインストールや[Program.cs]の編集が必要でした。

特に、[UseWindowsService]メソッド(または[AddWindowsService]メソッド)を追加していないと登録したサービスを開始できない可能性があります。

[ワーカーサービス]プロジェクトで出力される実行可能ファイル(拡張子 .exe)をWindowsサービスで開始できない人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です