2009-09-27 16 views
12

Ho sviluppato un servizio Windows in C#. Ho creato un programma di installazione con Visual Studio 2008, che installa il servizio di Windows. Tutto è buono finora. Voglio assicurarmi che la fonte di eventi sia stata creata al momento dell'installazione, in modo che eventuali condizioni di errore/eccezione in fase di esecuzione vengano registrate correttamente nel registro eventi di Windows.È necessario creare manualmente un'origine del registro eventi di Windows durante l'installazione di un servizio Windows

L'origine evento viene creata automaticamente (e rimossa) come parte dell'installazione del servizio Windows (e disinstallazione), oppure devo gestirla personalmente e creare un'azione personalizzata per crearla ed eliminarla come segue?

protected override void OnBeforeInstall(IDictionary savedState) 
{ 
    base.OnBeforeInstall(savedState); 

    if (!EventLog.SourceExists(ServiceName)) 
     EventLog.CreateEventSource(ServiceName, "Application"); 
} 

protected override void OnAfterUninstall(IDictionary savedState) 
{ 
    base.OnAfterInstall(savedState); 

    if (EventLog.SourceExists(ServiceName)) 
     EventLog.DeleteEventSource(ServiceName); 
} 

risposta

12

Mi sembra che lo ServiceInstaller crei automaticamente un DataSource durante l'installazione con lo stesso nome del servizio, quindi non è necessario alcun codice aggiuntivo.

Dal ServiceInstaller documentazione

Quando si esegue l'installazione, crea automaticamente un EventLogInstaller per installare la fonte registro eventi associato alla classe derivata ServiceBase. La proprietà Log per questa origine viene impostata dal costruttore ServiceInstaller nel registro dell'applicazione del computer. Quando si imposta ServiceName del ServiceInstaller (che dovrebbe essere identico al ServiceBase .. ::. ServiceName del servizio), Source viene automaticamente impostato sullo stesso valore. In un errore di installazione, l'installazione della sorgente viene sottoposta a rollback insieme ai servizi precedentemente installati.

8

è necessario registrarsi loro durante l'installazione, perché l'account del servizio potrebbe non avere il privilegio di farlo durante il runtime: How to: Add Your Application as a Source of Event Log Entries:

Per impostazione predefinita, se si tenta di scrivere un ingresso senza prima dopo aver registrato il componente come origine valida, il sistema registra automaticamente l'origine con il registro eventi, utilizzando il valore della proprietà Origine come stringa di origine . In generale, creare la nuova origine evento durante l'installazione della propria applicazione. Questo consente al sistema operativo di aggiornare l'elenco delle origini evento registrate e la relativa configurazione. Se il sistema operativo non ha aggiornato l'elenco delle sorgenti di eventi e si tenta di scrivere un evento con la nuova origine, l'operazione di scrittura avrà esito negativo. Se la creazione dell'origine durante l'installazione non è un'opzione, tenta di creare il pozzo di origine prima della prima operazione di scrittura, forse durante l'inizializzazione dell'applicazione . Se si sceglie questo approccio , assicurarsi che il codice di inizializzazione sia in esecuzione con i diritti di amministratore sul computer. Questi diritti necessari per la creazione di nuovo evento fonti

Fortunatamente il ServiceInstaller rende veramente facile, come già scoperto.

Problemi correlati