LoginSignup
1
1

More than 3 years have passed since last update.

C#でWindows Serviceを作る(5)

Posted at

概要

前回の記事C#でWindows Serviceを作る(4)の続き。
イベントログの実装を行います。

環境

Windows 10
Visual Studio 2017 Community

手順

イベントログはWindowsで管理されるログです。
出力したログ情報は、イベントビューワーで見ることができます。
image.png

ServiceBaseクラスの派生クラス(デフォルトだとService1.csというファイル。私のプロジェクトではServiceTest.cs)をデザイナーで開きます。
⇒ソリューションエクスプローラで該当ファイルをダブルクリックしてください。

その後、ツールボックスから、コンポーネントの中にある「EventLog」を選択し、
デザイナーにドラッグ&ドロップします。
image.png

次にドロップしたEventLogコンポーネントをクリックして、プロパティタブを開きます。
nameを適宜変更します。
ここではServiceEventLogにしています。
image.png

ここまで(コンポーネントを追加すること)で、EventLogクラスのインスタンス(ServiceEventLog)が生成されます。
⇒ServiceTest.Designer.csに定義されていますね。

続いてServiceTest.csのコードを表示し、コンストラクタに処理を追加します。

ServiceTest.cs
    ServiceTest()
    {
        InitializeComponent();

        // ---------- 以下が追加した処理 ----------
        ServiceEventLog = new System.Diagnostics.EventLog();
        if (!System.Diagnostics.EventLog.SourceExists("ServiceTest"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "ServiceTest", "Application");
        }
        ServiceEventLog.Source = "ServiceTest";
        ServiceEventLog.Log = "Application";
        // ----------------------------------------
    }

これでイベントログを出力する準備ができました。
試しに、前回Overrideして生成したOnPauseやOnContinueのイベントハンドラ内にログ出力処理を追加してみます。
ログ出力はWriteEntry関数を使用します。

ServiceTest.cs
    protected override void OnContinue()
    {
        ServiceEventLog.WriteEntry("OnContinue Called.");
        base.OnContinue();
    }

    protected override void OnPause()
    {
        ServiceEventLog.WriteEntry("OnPause Called.");
        base.OnPause();
    }

イベントビューワーを起動して、ログを確認してみます。
image.png

image.png

追加したイベントログがちゃんと保存されています。

次回は周期実行処理の実装について書きます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1