Domanda

Ho ottenuto un progetto di configurazione che installa un servizio Windows.

Stiamo registrando un'origine del registro degli eventi in un registro personalizzato che dovrebbe essere utilizzato dal progetto WinService (come e perché non è importante).

Il mio problema è che il progetto di configurazione cerca di creare un'origine del registro degli eventi per impostazione predefinita. Così facendo riceve un messaggio di errore ("Error 1001" source XXX already exists on local computer) e rotola indietro.

Ho guardato dappertutto e non riesco a scoprire dove viene eseguita la registrazione o come posso spegnerla.

Come posso forzare il progetto Windows o il progetto di configurazione a non creare una fonte di registro degli eventi?

È stato utile?

Soluzione

È possibile rimuovere il valore predefinito EventLogInstaller:

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

In alternativa, puoi modificare il Log proprietà:

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

Ora gli eventi saranno registrati con successo a Mylog, e gli eventi di avvio/arresto del servizio verranno comunque registrati al Applicazione tronco d'albero.

(fonte: Componente ServiceInstaller e il suo eventLoginstaller predefinito)

Altri suggerimenti

Immagino che quando disinstalla il servizio, qualcosa non è disinstallato correttamente, specialmente nel registro degli eventi.

Per ripristinare la possibilità di reinstallare di nuovo il servizio, ho scoperto (Grazie a questo articolo) È necessario rimuovere questa chiave nel registro (regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME

Questa è solo un'ipotesi basata sui miei test.

Il progetto di installazione (o la classe Windowservice) crea automaticamente un'origine evento con lo stesso nome di myService.ServiceName. Ciò è molto probabile perché i messaggi di avvio / stop vengono scritti nel registro ogni volta che un servizio viene avviato / arrestato. E quei messaggi hanno bisogno di una fonte.

In altre parole: non è necessario creare una fonte con lo stesso nome del ServiceName come è stato fatto per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top