Question

J'ai un projet d'installation qui installe un service Windows.

Nous enregistrons une source de journal d'événements dans un journal personnalisé qui devrait être utilisé par le projet winservice (comment et pourquoi n'est pas important).

Mon problème est que le projet d'installation essaie de créer une source de journal des événements par défaut.Ce faisant, il reçoit un message d'erreur ("Error 1001" source XXX already exists on local computer) et revient en arrière.

J'ai regardé partout et je ne trouve pas où l'enregistrement est effectué ni comment je peux le désactiver.

Comment puis-je forcer le service Windows ou le projet d'installation à NE PAS créer de source de journal des événements?

Était-ce utile?

La solution

Vous pouvez supprimer le EventLogInstaller par défaut:

namespace MyService
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();

            // Remove the default Event Log Installer
            EventLogInstaller DefaultInstaller = null;
            foreach (Installer installer in serviceInstaller1.Installers)
            {
                if (installer is EventLogInstaller)
                {
                    DefaultInstaller = (EventLogInstaller)installer;
                    break;
                }
            }
            if (DefaultInstaller != null)
            {
                serviceInstaller1.Installers.Remove(DefaultInstaller);
            }
        }
    }
}

Vous pouvez également modifier la propriété Log:

foreach (Installer installer in serviceInstaller1.Installers)
{
    if (installer is EventLogInstaller)
    {
        ((EventLogInstaller)installer).Log = "MyLog";
        break;
    }
}

Désormais, les événements seront correctement enregistrés dans MyLog , et les événements de démarrage / arrêt du service seront toujours enregistrés dans le journal Application .

(source: composant serviceInstaller et son EventLogInstaller par défaut )

Autres conseils

Je suppose que lorsque vous désinstallez le service, quelque chose n'est pas correctement désinstallé, en particulier dans le journal des événements.

Pour restaurer la possibilité de réinstaller le service, j'ai découvert ( grâce à cet article )vous devez supprimer cette clé du registre (regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME

Ce n'est qu'une estimation basée sur mes tests.

Le projet d'installation (ou la classe WindowService) crée automatiquement une source d'événement avec le même nom que myService.ServiceName.Cela est probablement dû au fait que les messages de démarrage / arrêt sont écrits dans le journal chaque fois qu'un service est démarré / arrêté.Et ces messages ont besoin d'une source.

En d'autres termes: vous n'avez pas besoin de créer une source avec le même nom que le ServiceName car cela est fait pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top