Pregunta

Obtuve un proyecto de configuración que instala un servicio de Windows.

Estamos registrando una fuente de registro de eventos en un registro personalizado que debe ser utilizado por el proyecto Winservice (cómo y por qué no es importante).

Mi problema es que el proyecto de configuración intenta crear una fuente de registro de eventos por predeterminado. Al hacerlo, es un mensaje de error ("Error 1001" source XXX already exists on local computer) y vuelve hacia atrás.

He mirado a todas partes y no puedo encontrar dónde se realiza el registro o cómo puedo apagarlo.

¿Cómo puedo obligar al Servicio de Windows o al proyecto Configuración a no crear una fuente de registro de eventos?

¿Fue útil?

Solución

Puede eliminar el valor predeterminado 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);
            }
        }
    }
}

Alternativamente, puede modificar el Log propiedad:

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

Ahora los eventos se registrarán con éxito para Mylog, y los eventos de inicio/parada del servicio aún se registrarán en el Solicitud Iniciar sesión.

(fuente: ServiceInStaller Component y su event EventLogInstaller predeterminado)

Otros consejos

Supongo que cuando desinstalas el servicio, algo no está correctamente desinstalado, especialmente en el registro de eventos.

Para restaurar la capacidad de reinstalar el servicio nuevamente, descubrí (Gracias a este artículo) Debe eliminar esta clave en el registro (regedit.exe):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\YOURSERVICENAME

Esto es solo una suposición basada en mis pruebas.

El proyecto del instalador (o la clase Windowservice) crea una fuente de evento automáticamente con el mismo nombre que myService.ServiceName. Esto es muy probable porque los mensajes de inicio / parada se escriben en el registro cada vez que se inicia / detiene un servicio. Y esos mensajes necesitan una fuente.

En otras palabras: no necesita crear una fuente con el mismo nombre que el nombre de servicio que se hace por usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top