2011-03-15 16 views
8

Quiero leer el registro de eventos en una computadora remota para verificar si hay errores durante las pruebas. Aquí hay un código relevante:Leer el registro de eventos de forma remota con .NET

public bool CheckEventLogs(DateTime start) 
{ 
    EventLog myEventLog = new EventLog("CustomLog", "ServerName"); 
    bool errorFound = false; 
    foreach (EventLogEntry entry in myEventLog.Entries) 
    { 
    if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start) 
    { 
     Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n"); 
     errorFound = true; 
    } 
    } 
    return errorFound; 
} 

Actualmente, este código produce una excepción (Se intentó realizar una operación no autorizada). De acuerdo con MSDN, necesito EventLogPermission, pero he estado luchando para encontrar ejemplos de cómo usar este permiso. ¿Alguien tiene un ejemplo de cómo hacer esto?

Editar: Respuesta a los comentarios

Gracias a todos por los comentarios - aquí está la información adicional solicitada:

Se inicia la excepción de la declaración foreach. Específicamente, al recorrer el código que arrojó en el paso siguiente cuando se resalta in. Parece que pude crear el objeto de registro de eventos pero no puedo acceder a las entradas en el registro de eventos.

Mi cuenta no tiene permiso para leer el registro de eventos en el sistema de destino, pero tengo credenciales para una cuenta que sí lo tiene. Cuando se conecta manualmente a través del visor de eventos, hay una opción para conectarse como otro usuario. Después de hacer esto manualmente, mi código se ejecutó sin problemas. Sin embargo, no puedo confiar en hacerlo manualmente cada vez que se ejecuta este programa. Lo que necesito es una forma de conectarme como otro usuario programáticamente. Pensé que el EventLogPermission sería la manera de hacerlo, pero tal vez hay otra manera. Si alguien sabe cómo conectarse a un registro remoto como un usuario diferente en C#, eso sería exactamente lo que estaba buscando.

+1

¿Qué línea arroja la excepción? El artículo de MSDN solo dice que necesita permiso para escribir; no dice nada sobre la lectura. – Gabe

+1

¿Su cuenta de usuario tiene permiso para leer el registro de eventos en la máquina remota? Abra el Visor de eventos e intente conectarse a la computadora remota desde su máquina para verificar. –

+0

Solo pruebo tu código y obtengo los registros del servidor remoto. Todo funciona bien – Polaris

Respuesta

2

Gracias a todos los que hicieron comentarios sobre esta pregunta. Una vez que me di cuenta de que los permisos podrían no ser parte de .NET, sino que formaban parte de Windows y del visor de eventos en sí, tenía algunas nuevas direcciones para mis propias investigaciones.

Parece que un comando de "uso de red" era todo lo que se necesitaba para establecer la conexión entre mi computadora local y la computadora remota. Cuando llamé "uso neto" antes de usar el código que publiqué en la pregunta, las cosas funcionaron maravillosamente. Es bastante simple llamarlo desde el código antes de leer desde el registro de eventos.

Gracias de nuevo por su ayuda!

+0

Puede publicar el código que funcionó para usted. – Praneeth

+0

Creo que el código original que publiqué en la pregunta funcionó después de ejecutar un comando de "uso de red" para establecer la conexión entre mi computadora local y la computadora remota. – Brian

+0

¿Podría mostrarnos cómo usó 'net use' de su código? Me está costando mucho encontrar esto. – snippetkid

6

WMI es increíblemente útil para esto, como un fragmento

SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent 

le permitirá consultar los registros. This utility de MS le permitirá explorar WMI e incluso compilará el código .net para invocar las consultas.

Otro beneficio de esto es que va a obtener todos los eventos y llevarlos a la aplicación local donde los puede analizar a su gusto. Iterar los eventos en la forma en que lo hace ahora es propenso a fallar si la conexión se interrumpe mientras está procesando (de hecho, este es el mismo método que generalmente se emplea con el acceso a la base de datos).

Cuestiones relacionadas