2009-09-27 4 views
12

Ich habe einen Windows-Dienst in C# entwickelt. Ich habe ein Installationsprogramm mit Visual Studio 2008 erstellt, das den Windows-Dienst installiert. Bis jetzt ist alles gut. Ich möchte sicherstellen, dass die Ereignisquelle zum Zeitpunkt der Installation erstellt wurde, damit alle Fehler-/Ausnahmebedingungen zur Laufzeit ordnungsgemäß im Windows-Ereignisprotokoll protokolliert werden.Muss eine Windows-Ereignisprotokollquelle manuell erstellt werden, wenn ein Windows-Dienst installiert wird

Wird die Ereignisquelle automatisch als Teil der Windows-Dienst-Installation (und -Deinstallation) erstellt (und entfernt), oder muss ich selbst damit umgehen und eine benutzerdefinierte Aktion zum Erstellen und Löschen wie folgt erstellen?

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

Antwort

12

Es scheint mir, als ob die ServiceInstaller automatisch eine DataSource während der Installation mit dem gleichen Namen wie der Dienst erstellt, so dass kein zusätzlicher Code benötigt wird.

Von der ServiceInstaller Dokumentation

Wenn die Installation ausgeführt wird, erstellt es automatisch eine Eventloginstaller der Ereignisprotokoll-Quelle mit der Servicebase abgeleiteten Klasse zugeordnet zu installieren. Die Log-Eigenschaft für diese Quelle wird vom ServiceInstaller-Konstruktor im Anwendungsprotokoll des Computers festgelegt. Wenn Sie den ServiceName des ServiceInstaller (der mit ServiceBase .. ::. ServiceName des Service identisch sein sollte) festlegen, wird die Quelle automatisch auf den gleichen Wert festgelegt. Bei einem Installationsfehler wird die Installation der Quelle zusammen mit zuvor installierten Diensten zurückgesetzt.

8

Sie müssen registriert sie während der Installation, da das Dienstkonto nicht das Privileg, so dass während der Laufzeit zu tun haben könnte: How to: Add Your Application as a Source of Event Log Entries:

standardmäßig, wenn Sie versuchen, ohne zuerst einen Eintrag zu schreiben Wenn Sie Ihre Komponente als gültige Quelle registriert haben, registriert das System automatisch die Quelle mit dem Ereignisprotokoll, wobei der Wert der Eigenschaft Source als Quellzeichenfolge verwendet wird. Erstellen Sie im Allgemeinen die neue Ereignisquelle während der Installation Ihrer Anwendung. Diese ermöglicht es dem Betriebssystem seine Liste der registrierten Ereignisquellen und deren Konfiguration zu aktualisieren. Wenn das Betriebssystem seine Liste der Ereignisquellen aktualisiert hat und Sie versuchen, ein Ereignis mit der neuen Quelle zu schreiben, schlägt die Schreiboperation fehl. Wenn das Erstellen der Quelle während der Installation keine Option ist, versuchen Sie dann, die Quellenquelle vor der ersten Schreiboperation, , während Ihrer Anwendung Initialisierung zu erstellen. Wenn Sie diesen Ansatz wählen, stellen Sie sicher, dass Ihr Initialisierungscode mit Administratorrechten auf dem Computer ausgeführt wird. Diese Rechte erforderlich sind für die Schaffung neues Ereignis Quellen

Zum Glück ist die ServiceInstaller machen es wirklich einfach, wie Sie vielleicht schon herausgefunden.