2010-11-23 11 views
7

Ich bin mit dem folgenden Code ein benutzerdefinierten Ereignisprotokoll in meiner Windows-Dienst-Anwendung zu erstellen:Fehler beim Schreiben in das Ereignisprotokoll, verhindert, dass der Windows-Dienst gestartet wird?

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"); 
} 

Nach dem Service.msi installieren, wenn ich den Dienst begann es gestartet und gestoppt dann. Dann fand ich den folgenden Fehler im EventViewer Windows Log Abschnitt:

Der Dienst kann nicht gestartet werden. System.ArgumentException: Die Quelleigenschaft wurde nicht vor dem Schreiben von in das Ereignisprotokoll festgelegt.

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)

Antwort

6

Wenn die Quelle bereits vorhanden ist, sieht es so aus, als ob Sie eventLog1.Source nicht initialisieren.

Wir empfehlen Ihnen, den Initialisierungscode in OnStart und außerhalb des Konstruktors zu verschieben.

Und bewegen Sie diese beiden Zeilen aus dem if-Anweisung:

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

Versuchen Sie Folgendes:

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

Auch die folgenden in OnStart setzen:

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

Verwandte Themen