2009-09-27 12 views
12

He desarrollado un servicio de Windows en C#. Creé un instalador con Visual Studio 2008, que instala el servicio de Windows. Todo está bien hasta ahora. Quiero asegurarme de que el origen del evento se haya creado en el momento de la instalación, de modo que cualquier condición de error/excepción en el tiempo de ejecución esté correctamente registrada en el registro de eventos de Windows.¿Necesita crear manualmente un origen de registro de eventos de Windows al instalar un servicio de Windows?

¿El origen del evento se crea automáticamente (y se elimina) como parte de la instalación del servicio de Windows (y desinstalación) o tengo que manejarlo yo mismo y crear una acción personalizada para crearlo y eliminarlo de la siguiente manera?

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

Respuesta

12

Me parece que el ServiceInstaller crea automáticamente un DataSource durante la instalación con el mismo nombre que el servicio, por lo que no es necesario ningún código adicional.

De la documentación ServiceInstaller

Cuando se realiza la instalación, se crea automáticamente una EventLogInstaller para instalar la fuente de registro de eventos asociados con la clase derivada ServiceBase. La propiedad de registro para este origen la establece el constructor de ServiceInstaller en el registro de aplicación de la computadora. Cuando configura el ServiceName del ServiceInstaller (que debe ser idéntico al ServiceBase .. ::. ServiceName del servicio), el origen se establece automáticamente en el mismo valor. En una falla de instalación, la instalación de la fuente se retrotrae junto con los servicios instalados anteriormente.

8

Usted debe registrarlos durante la instalación, ya que la cuenta de servicio que no tenga el privilegio de hacerlo en tiempo de ejecución: How to: Add Your Application as a Source of Event Log Entries:

Por defecto, si intenta escribir una entrada sin antes habiendo registrado su componente como fuente válida, el sistema registra automáticamente la fuente con el registro de eventos, utilizando el valor de la propiedad Fuente como la cadena fuente . En general, cree el nuevo origen de evento durante la instalación de su aplicación. Este permite que el sistema operativo actualice su lista de orígenes de eventos registrados y su configuración. Si el sistema operativo no ha actualizado su lista de orígenes de eventos e intenta escribir un evento con la nueva fuente, la operación de escritura fallará. Si no se puede crear la fuente durante la instalación, intente crear el pozo fuente antes de la primera operación de escritura, , quizás durante la inicialización de la aplicación . Si elige este enfoque , asegúrese de que su código de inicialización se esté ejecutando con los derechos de administrador en la computadora. Estos derechos se requieren para crear un nuevo evento fuentes

Afortunadamente, el ServiceInstaller hace que sea muy fácil, como ya descubierto.

Cuestiones relacionadas