Saltar al contenido

Escribir en el registro de eventos de la aplicación de Windows

Solución:

Sí, hay una forma de escribir en el registro de eventos que está buscando. No necesita crear una nueva fuente, simplemente use la existente, que a menudo tiene el mismo nombre que el nombre del EventLog y también, en algunos casos, como la aplicación de registro de eventos, puede ser accesible sin privilegios administrativos *.

* Otros casos, en los que no se puede acceder directamente, son el Security EventLog, por ejemplo, al que solo accede el sistema operativo.

Usé este código para escribir directamente en la aplicación de registro de eventos:

using (EventLog eventLog = new EventLog("Application")) 
{
    eventLog.Source = "Application"; 
    eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 101, 1); 
}

Como puede ver, la fuente de EventLog es la misma que el nombre de EventLog. La razón de esto se puede encontrar en Event Sources @ Windows Dev Center (en negrita la parte que se refiere al nombre de la fuente):

Cada registro de la clave Eventlog contiene subclaves llamadas fuentes de eventos. La fuente del evento es el nombre del software que registra el evento. Suele ser el nombre de la aplicación. o el nombre de un subcomponente de la aplicación si la aplicación es grande. Puede agregar un máximo de 16,384 fuentes de eventos al registro.

Como se indica en MSDN (por ejemplo, https://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog(v=vs.110).aspx), verificar una fuente no existente y crear una fuente requiere administrador privilegio.

Sin embargo, es posible utilizar el fuente “Aplicación” sin. En mi prueba en Windows 2012 Server r2, sin embargo, obtengo la siguiente entrada de registro usando la fuente “Aplicación”:

No se puede encontrar la descripción del Id. De evento xxxx de la aplicación de origen. El componente que genera este evento no está instalado en su computadora local o la instalación está dañada. Puede instalar o reparar el componente en la computadora local. Si el evento se originó en otra computadora, la información de la pantalla tenía que guardarse con el evento. La siguiente información se incluyó con el evento: {mi mensaje de entrada de evento} el recurso de mensaje está presente pero el mensaje no se encuentra en la tabla de cadena / mensaje

Definí el siguiente método para crear la fuente:

    private string CreateEventSource(string currentAppName)
    {
        string eventSource = currentAppName;
        bool sourceExists;
        try
        {
            // searching the source throws a security exception ONLY if not exists!
            sourceExists = EventLog.SourceExists(eventSource);
            if (!sourceExists)
            {   // no exception until yet means the user as admin privilege
                EventLog.CreateEventSource(eventSource, "Application");
            }
        }
        catch (SecurityException)
        {
            eventSource = "Application";
        }

        return eventSource;
    }

Lo estoy llamando con currentAppName = AppDomain.CurrentDomain.FriendlyName

Podría ser posible usar la clase EventLogPermission en lugar de este try / catch, pero no estoy seguro de que podamos evitarlo.

También es posible crear la fuente externamente, por ejemplo, en Powershell elevado:

New-EventLog -LogName Application -Source MyApp

Luego, usar ‘MyApp’ en el método anterior NO generará una excepción y el EventLog se puede crear con esa fuente.

Puede usar la clase EventLog, como se explica en Cómo: Escribir en el registro de eventos de la aplicación (Visual C #):

var appLog = new EventLog("Application");
appLog.Source = "MySource";
appLog.WriteEntry("Test log message");

Sin embargo, deberás configurar esto fuente “MySource” con privilegios administrativos:

Utilice WriteEvent y WriteEntry para escribir eventos en un registro de eventos. Debe especificar una fuente de eventos para escribir eventos; debe crear y configurar la fuente del evento antes de escribir la primera entrada con la fuente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *