2009-09-27 7 views
12

J'ai développé un service Windows en C#. J'ai créé un programme d'installation avec Visual Studio 2008, qui installe le service Windows. Tout est bon jusqu'à présent. Je veux m'assurer que la source de l'événement a été créée au moment de l'installation, afin que toutes les conditions d'erreur/d'exception au moment de l'exécution soient correctement consignées dans le journal des événements Windows. La source de l'événement est-elle automatiquement créée (et supprimée) dans le cadre de l'installation (et de la désinstallation) du service Windows, ou dois-je la gérer moi-même et créer une action personnalisée pour la créer et la supprimer comme suit?Est-il nécessaire de créer manuellement une source de journal des événements Windows lors de l'installation d'un service Windows?

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

Répondre

12

Il me semble que le ServiceInstaller crée automatiquement un DataSource lors de l'installation avec le même nom que le service, il n'y a donc pas besoin de code supplémentaire.

De la documentation ServiceInstaller

Une fois l'installation effectuée, il crée automatiquement une EventLogInstaller installer la source du journal des événements associés à la ServiceBase classe dérivée. La propriété Log de cette source est définie par le constructeur ServiceInstaller dans le journal des applications de l'ordinateur. Lorsque vous définissez le ServiceName de ServiceInstaller (qui doit être identique à ServiceBase .. ::. ServiceName du service), la Source est automatiquement définie sur la même valeur. En cas d'échec de l'installation, l'installation de la source est restaurée avec les services précédemment installés.

8

Vous devez les enregistrer installer pendant que le compte de service pourrait ne pas avoir le privilège de le faire lors de l'exécution: How to: Add Your Application as a Source of Event Log Entries:

Par défaut, si vous essayez d'écrire une entrée sans d'abord ayant enregistré comme source valide, le système enregistre automatiquement la source dans le journal des événements, en utilisant la valeur de la propriété Source comme chaîne source . En général, créez la nouvelle source d'événement pendant l'installation de votre application. Cette permet au système d'exploitation d'actualiser sa liste de sources d'événements enregistrées et leur configuration. Si le système d'exploitation n'a pas rafraîchi sa liste de sources d'événements et que vous essayez d'écrire un événement avec la nouvelle source, l'opération d'écriture échouera. Si créer la source lors de l'installation n'est pas une option, puis essayez de créer le puits source avant la première opération d'écriture, peut-être lors de l'initialisation de votre application . Si vous choisissez cette approche , assurez-vous que votre code d'initialisation s'exécute avec les droits d'administrateur sur l'ordinateur. Ces droits nécessaires à la création d'un nouvel événement sources

Heureusement, le ServiceInstaller rend vraiment facile, comme vous avez déjà découvert.

Questions connexes