最初の Windows Service

1.Windowsサービスプロジェクトを新規作成

  1. Visual Studioを開き、新規プロジェクトを作成
  2. テンプレート選択:Visual C# → Windows → Windows サービス
  3. プロジェクト名と保存先を設定し、OKをクリック

注意:新しいバージョンのVisual Studioにはこのテンプレートが同梱されなくなりました。.NET Frameworkのみ対応。.NET Core/.NET5以降はWorker Serviceの使用を推奨します。

2.プロジェクト構成の解説

自動生成される主要ファイル:

  1. Program.cs:アプリケーションのエントリーポイント
  2. Service1.cs:サービスの本体ロジッククラス
1. Program.cs エントリーコード
static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}Code language: JavaScript (javascript)

役割:サービスホストを起動し、1つまたは複数のサービスインスタンスを読み込みます。

2. Service1.cs サービスメインクラス
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    // 【サービス起動時に実行】
    protected override void OnStart(string[] args)
    {

    }

    // 【サービス停止時に実行】
    protected override void OnStop()
    {

    }
}
  • OnStart:サービス起動で呼び出され、業務ロジックを記述します
  • OnStop:サービス停止時に呼び出され、リソース解放処理を記述します

3.インストーラーを追加

この手順は必須です。これを行わないとシステムサービスへ登録できません。

操作手順
  1. Service1のデザインビュー上で右クリック → インストーラーの追加
  2. Visual Studioが自動でProjectInstaller.csを作成。2つの主要コンポーネントが含まれます:
    • serviceInstaller1
    • serviceProcessInstaller1

コンポーネントプロパティ設定

  1. serviceInstaller1(サービス情報設定)
    • ServiceName:コード上で使用する内部サービス名
    • DisplayName:サービスマネージャーに表示される名前
    • Description:サービスの説明文
    • StartType:起動種類 Manual(手動)/Automatic(自動)
  2. serviceProcessInstaller1(実行アカウント設定)
    • Account:実行するユーザーID
    • LocalSystem:ローカルシステムアカウント(最高権限、テスト向け)
    • User:指定したWindowsアカウント(既定、ユーザー名・パスワードが必要)

4.テスト用業務ロジックを記述

業務処理はService1クラスに実装します。Windowsサービスはデバッグが難しいため、一時的にログ出力で動作確認を行います。インストールとアンインストールが必要になります。

Service1.csを修正

using System.IO;

protected override void OnStart(string[] args)
{
    // 起動時ログ出力
    File.AppendAllText("log.txt", "起動時間:" + DateTime.Now + Environment.NewLine);
}

protected override void OnStop()
{
    // 停止時ログ出力
    File.AppendAllText("log.txt", "停止時間:" + DateTime.Now + Environment.NewLine);
}Code language: JavaScript (javascript)

5.コンパイル・インストール・サービス起動

  1. プロジェクトをビルドし、WindowsServiceDemo.exeを取得
  2. InstallUtil.exeでサービス登録(管理者権限CMD)
# サービスインストール
InstallUtil.exe WindowsServiceDemo.exe

# サービスアンインストール
InstallUtil.exe /u WindowsServiceDemo.exeCode language: PHP (php)
  1. サービスマネージャーservices.mscを開き、対象サービスを起動・停止しログを確認

サービスは通常アプリのように直接実行・デバッグできません。専用ツールでインストールする必要があります。

注意点

  1. F5による直接デバッグ不可:Windowsサービスは直接デバッグできない。デュアルモードを実装し、コマンドライン起動時はコンソールアプリ、インストール後はサービスとして動作させる方式が推奨。
  2. パスの問題:相対パスは無効になるため絶対パスを使用してください。
  3. 権限の問題:実行アカウントにより、ディスク、ネットワーク、共有フォルダへのアクセス権限が変わります。
  4. 起動タイムアウトOnStart内で長時間ブロックすると起動失敗と判定されます。重い処理は別スレッドで実行してください。

最初の Windows Service

コメントを残す

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