2011-11-16 13 views
34

Windowsサービスプログラムを作成しましたが、私のエラーをWindowsのeventLogに厳密に書きたいとします。Windowsサービスプログラムでのイベントのログ

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

しかし、私は、私が起動したとき、私はイベントビューア]ウィンドウに作成されたイベントログに書いたカスタムログメッセージのいずれかを参照するか、サービスを停止しない:だから私は、コードプロジェクトの記事から以下の手順に従っ。 また、メッセージがエラーの原因であるのか、それとも情報なのかを指定するにはどうすればよいですか?

答えて

57

まず、MSDNはあなたの友人です。知っておく価値がある可能性があるので、リンクを確認してください。基本的に

、あなたはEventLogにオブジェクトを作成します。

this.ServiceName = "MyService"; 
this.EventLog = new System.Diagnostics.EventLog(); 
this.EventLog.Source = this.ServiceName; 
this.EventLog.Log = "Application"; 

上記のソースが存在しない場合にも、ソースを作成する必要があります。その後、

((ISupportInitialize)(this.EventLog)).BeginInit(); 
if (!EventLog.SourceExists(this.EventLog.Source)) 
{ 
    EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log); 
} 
((ISupportInitialize)(this.EventLog)).EndInit(); 

と、単にそれを使用します。

this.EventLog.WriteEntry("My Eventlog message.", EventLogEntryType.Information); 

実際はかなりシンプルです。

+10

注:次のように

まず、あなたのコンストラクタで

using System.ComponentModel; using System.Diagnostics; 

その後、セットアップログ

public UserService1() { //Setup Service this.ServiceName = "MyService2"; this.CanStop = true; this.CanPauseAndContinue = true; //Setup logging this.AutoLog = false; ((ISupportInitialize) this.EventLog).BeginInit(); if (!EventLog.SourceExists(this.ServiceName)) { EventLog.CreateEventSource(this.ServiceName, "Application"); } ((ISupportInitialize) this.EventLog).EndInit(); this.EventLog.Source = this.ServiceName; this.EventLog.Log = "Application"; } 

使用次の名前空間を含めますログを作成します。それ以外の場合は、少なくともWindows Server 2003以降の例外が発生します。 –

+1

MSDNのドキュメントには明白に記載されています。 – alphadogg

+8

@alphadogg ServiceBaseのEventLogのプロパティは読み取り専用です。コードは間違っています。デフォルトでは、.NETベースのWindowsサービスはイベントログを「アプリケーション」として書き込むので、手動で指定する必要はありません。 –

21

私は最終的に、さまざまなStackOverflow回答とMSDNを組み合わせることでこの問題を解決しました。あなたが実際に適切な権限を持っている必要があります

protected override void OnStart(string[] args) 
    { 
     base.OnStart(args); 

     this.EventLog.WriteEntry("In OnStart"); 
    } 
関連する問題