Blog alskare

.Net y lo que surja

Escribir en el registro del sistema con C#

Posted by alskare en 24/07/2009

Dejando de lado ya el tema de las conversiones, me dispongo a crear una pequeña utilidad que nos permita almacenar información en el registro del sistema. Cada uno, después, puede utilizarlo para lo que quiera: control de errores, registrar acciones que realice un usuario, etc.. En definitiva, se trata de registrar una información cuando queramos, que permanecerá almacenada en el sistema.

Si ejecutamos Inicio, ejecutar, Eventvwr.msc veremos el Visor de sucesos de nuestro ordenador, con los errores, advertencias e información varia que van almacenando las aplicaciones que tenemos instaladas. ¿Por qué no aprovechar para poder dejar ahí la información que queramos controlar?.

Creación de un “Visor propio”

Una de las opciones que tenemos es la de añadir una lista de eventos propia, es decir, añadir una lista que se sumaría a la ya existentes de Aplicación, Seguridad, Sistema, etc. En el ejemplo siguiente, creamos una nueva lista denominada MiPrograma que quedará preparada para poder añadir la información que más deseemos:

private static void EscribeEnRegistro()
{
    EventLog evento;
    string registro = "MisProgramas";
    string equipo = Environment.MachineName;
    string programa;

    // Mensajes de una primera aplicación ficticia
    programa = "Programa1";
    evento = new EventLog(registro, equipo, programa);
    evento.WriteEntry("Información relatica a la aplicación", EventLogEntryType.Information);
    evento.WriteEntry("Ocurrió un error en la aplicación", EventLogEntryType.Error);
    evento.WriteEntry("Suceso correcto", EventLogEntryType.SuccessAudit);
    evento = null;

    // Mensajes de una primera aplicación ficticia
    programa = "Programa2";
    evento = new EventLog(registro, equipo, programa);
    evento.WriteEntry("Información relatica a la aplicación", EventLogEntryType.Information);
    evento.WriteEntry("Ocurrió un error en la aplicación", EventLogEntryType.Error);
    evento.WriteEntry("Suceso correcto", EventLogEntryType.SuccessAudit);
    evento = null;
}

A partir de este momento, podemos añadir la información de la que queramos tener constancia en esta “ramificación” del Visor de Sucesos.

image

Lectura de las entradas del registro.

Una vez hemos ido creando las diferentes entradas en el Visor de sucesos, es probable que necesitemos tener algún tipo de acceso a las mismas. Con la rutina siguiente podemos hacer una sencilla lectura de los diferentes elementos.

private static void LecturaDeRegistro()
{
    string registro = "MisProgramas";
    string equipo = Environment.MachineName;

    EventLog log = new EventLog(registro, ".");
    foreach (EventLogEntry entrada in log.Entries)
    {
        Console.WriteLine(entrada.Message);

    }
}

De hecho, en el ejemplo, sólo he incluido que se vayan mostrando los diferentes mensajes, pero la clase EventLogEntry encapsula todas las propiedades de una entrada realizada en el Visor de Sucesos.

Eliminar nuestro “Visor”

Por cierto, que una vez creado este nuevo “Visor”, he querido eliminarlo para que me quedase tal cual lo tenía antes y he tenido algún que otro problema, imagino que por mi falta de conocimientos del sistema. Así que he tenido que documentarme un poco en el tema de los visores de sucesos.

Cuando se crea una nueva lista, nos encontramos con la creación de dos nuevos elementos que habrá que eliminar siguiendo el orden en el que están establecidos a continuación:

  • Una entrada en el registro : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\MisProgramas
  • Un fichero: C:\WINDOWS\system32\config\MisProgr.evt

En mi caso particular, tras la eliminación de la rama completa del registro, he tenido que reiniciar el ordenador para poder borrar físicamente el fichero.

3 comentarios to “Escribir en el registro del sistema con C#”

  1. alskare said

    Qué bueno!. Recuerdo que me pegué un buen rato en su día con el tema del borrado y resulta que, tonto de mí, no me fijé en los métodos estáticos que no son accesibles desde la instancia.

    Últimamente voy estresadísimo con el tema del trabajo y la verdad es que no puedo dedicarle mucho tiempo a esto del blog, pero estos detalles como el que acabas de tener son los que hacen que te crezca de nuevo el gusanillo de volver a hacer cosas nuevas.

    Gracias, de veras.

  2. Hola ya ha pasado tiempo desde que publicaste este articulo, pero te no veo la parte de eliminación, y hay una opcion el la misma clase EventLog que es:

    EventLog.Delete(“MisProgramas”);

    :-P

  3. Gracias a tu publicación logré separar mis aplicaciones del log general.

    Muchas gracias,

    saludos!

Sorry, the comment form is closed at this time.

 
A %d blogueros les gusta esto: