概要
前回の記事C#でWindows Serviceを作る(4)の続き。
イベントログの実装を行います。
環境
Windows 10
Visual Studio 2017 Community
手順
イベントログはWindowsで管理されるログです。
出力したログ情報は、イベントビューワーで見ることができます。
ServiceBaseクラスの派生クラス(デフォルトだとService1.csというファイル。私のプロジェクトではServiceTest.cs)をデザイナーで開きます。
⇒ソリューションエクスプローラで該当ファイルをダブルクリックしてください。
その後、ツールボックスから、コンポーネントの中にある「EventLog」を選択し、
デザイナーにドラッグ&ドロップします。
次にドロップしたEventLogコンポーネントをクリックして、プロパティタブを開きます。
nameを適宜変更します。
ここではServiceEventLogにしています。
ここまで(コンポーネントを追加すること)で、EventLogクラスのインスタンス(ServiceEventLog)が生成されます。
⇒ServiceTest.Designer.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関数を使用します。
protected override void OnContinue()
{
ServiceEventLog.WriteEntry("OnContinue Called.");
base.OnContinue();
}
protected override void OnPause()
{
ServiceEventLog.WriteEntry("OnPause Called.");
base.OnPause();
}
追加したイベントログがちゃんと保存されています。
次回は周期実行処理の実装について書きます。