2010-11-23 42 views
7

私はWindowsサービスアプリケーションカスタムイベントログを作成するには、次のコードを使用しています:私はそれを開始し、その後、立ち止まっサービスを始めたとき、service.msiをインストールした後イベントログに書き込み中にエラーが発生すると、Windowsサービスが開始されません。

public ServiceConstructor() 
{ 
    InitializeComponent(); 
    if (!EventLog.SourceExists("WinService")) 
    { 
    EventLog.CreateEventSource("WinService", "WinServiceLog"); 
    eventLog1.Source = "WinService"; 
    eventLog1.Log = "WinServiceLog"; 
    } 
} 
protected override void OnStart(string[] args) 
{ 
eventLog1.WriteEntry("Started"); 
} 

。その後、私はEventViewerウィンドウのログセクションで次のエラーが見つかりました:

サービスを開始できません。 System.ArgumentException:ソースプロパティーがイベントログに を書き込む前に設定されていませんでした。

at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData) at System.Diagnostics.EventLog.WriteEntry(String message) at WinService.Service.OnStart(String[] args) at System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(Object state)

答えて

6

ソースが既に存在する場合は、eventLog1.Sourceを初期化していないようです。

初期化コードをOnStartに移動し、コンストラクタから移動することをお勧めします。

そして、if文のうち、次の2行を移動:

eventLog1.Source = "WinService"; 
eventLog1.Log = "WinServiceLog"; 
4

次のことを試してみてください。

EventLog.CreateEventSource("WinService", "Application");
eventLog1.Log = "Application";

またOnStartメソッドに次のように置く:

eventLog1.Log="Application"
eventLog1.Source = "WinService";

関連する問題