2010-11-23 47 views
7

J'utilise le code suivant pour créer une application de service journal dans mon fenêtres d'événements personnalisé:Erreur lors de l'écriture dans le journal des événements, empêche le démarrage du service 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"); 
} 

Après avoir installé le service.msi, quand j'ai commencé le service qu'il a commencé et stoped. Ensuite, j'ai trouvé l'erreur suivante dans la section du journal des fenêtres EventViewer:

Le service ne peut pas être démarré. System.ArgumentException: la propriété Source n'a pas été définie avant d'écrire dans le journal des événements.

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)

Répondre

6

Si la source existe déjà, il semble que vous n'initialisiez pas eventLog1.Source.

Vous proposez de déplacer le code d'initialisation vers OnStart et hors du constructeur.

Et déplacer ces deux lignes de l'instruction if:

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

Effectuez les opérations suivantes:

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

mettre également les éléments suivants dans OnStart:

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