2012-01-06 22 views
1

Windowsサービスを作成しました。私はイベントログを作成します。C#を使用してカスタムイベントログを作成する方法

public Service1() 
{ 
     InitializeComponent(); 
     this.ServiceName = ConfigurationManager.AppSettings.Get("ServiceName"); 

     string sourceName = ConfigurationManager.AppSettings.Get("ServiceName"); 
     string logName = ConfigurationManager.AppSettings["EventLogName"]; 
     try 
     { 
      if (!System.Diagnostics.EventLog.Exists(sourceName)) 
       System.Diagnostics.EventLog.CreateEventSource(sourceName, logName); 
      eventLog.Source = sourceName; 
      eventLog.Log = logName; 
     } 
     catch 
     { 
      eventLog.Source = "Application"; 
     } 
    } 

初期化中、サービスがインストールされ、ログは作成されません。ログエントリは、システムのApplicationログにあります。

私は何を欠席しましたか?

私は、イベントログを作成するために、どのようにインストール

public ProjectInstaller() 
{ 
     InitializeComponent(); 
     this.Installers.Add(GetServiceInstaller()); 
     this.Installers.Add(GetServiceProcessInstaller()); 
} 

private ServiceInstaller GetServiceInstaller() 
{ 
     serviceInstaller.ServiceName = GetConfigurationValue("ServiceName"); 
     serviceInstaller.Description = GetConfigurationValue("Description"); 
     serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic; 
     return serviceInstaller; 
} 

private ServiceProcessInstaller GetServiceProcessInstaller() 
{ 
     serviceProcessinstaller.Account = ServiceAccount.LocalSystem; 
     return serviceProcessinstaller; 
} 

にプロセスのインストーラを使用?

答えて

2
を次のようにコードを変更

if (!System.Diagnostics.EventLog.SourceExists(sourceName)) 
      System.Diagnostics.EventLog.CreateEventSource(sourceName, logName); 
+1

私はあなたのコードを試してみました。イベントログを作成せず、サービスを開始できませんでした。サービスはサービスを開始できないことを示します。 System.ArgumentException:ソース 'SyncronizationService'がログ 'SyncronizationLog'に登録されていません。 「ソースとログのプロパティが一致する必要があります。または、空の文字列にLogを設定すると、自動的にSourceプロパティに一致します。エラーメッセージ – Pooja

+1

logNameはユニークな最初の文字を持って、このリンクを確認してください。http://msdn.microsoft.com/en-us/library/y7x55536%28v=vs.90%29.aspx – Mhmd

0

はfalseを最初にAutoLogのを設定してみてください。

this.AutoLog = false; 

    if (!System.Diagnostics.EventLog.SourceExists(sourceName)) 
    {   
     System.Diagnostics.EventLog.CreateEventSource(sourceName, logName); 
    } 

    eventLog.Source = "MySource"; 

このMSDN walkthroughでは、それらのステップを完全に省略しているようです。しかし、このMSDN「How to:」で、彼らは国家:

あなたがアプリケーションログ以外のイベントログに書き込みたい場合は、あなたのサービスの中に、独自のカスタムイベントログを作成し、falseにAutoLogのプロパティを設定する必要がありますコードを作成して、そのログのエントリの有効なソースとしてサービスを登録します。

私はAutoLogをfalseに設定した後、私のカスタムログとイベントが期待どおりに表示されました。

0

ServiceNameとSourceは異なる名前でなければなりません。

のServiceName

this.serviceInstaller1.ServiceName = "MaliyeWMService"; 

ソース

if (!System.Diagnostics.EventLog.SourceExists("MaliyeMailService")) 
{ 
    System.Diagnostics.EventLog.CreateEventSource("MaliyeMailService", "MaliyeMailServiceLog"); 

} 
OlayLog.Source = "MaliyeMailService"; 
関連する問題