2012-01-11 25 views
12

A continuación se muestra una excepción que me encontré mientras se ejecuta inmediatamente siguiente código:C# EventLog inaccesible Entrar

La fuente no ha sido encontrado, pero algunos o todos los registros de eventos no pudieron ser buscado. Registros inaccesibles: seguridad.

El código es

if (!EventLog.SourceExists(this.EventLogSource)) 

El contenido de la excepción tiene sentido para mí, es por eso que no lo hace. Esta línea se ejecuta en Visual Studio 2010, .NET 4, como una aplicación de consola (por el momento). He ejecutado esto en un entorno diferente, pero no esperaría el hecho de que estoy alejado del escritorio para romper este método. Intenté cambiar los permisos HKML\CCS\Services\eventlog, pero no obtuve ningún permiso, así como los permisos C:\Windows\System32\Winevt\Logs\Security.evtx. De nuevo, fue en vano.

Mis preguntas son las siguientes:

  1. Por qué no hay un reemplazo para ignorar los registros de seguros,
  2. ¿Cómo puedo solucionar este (mediante programación)
  3. Es esto porque soy remoto Desked.

Cualquier consejo sería genial.

+2

No particularmente útil -_- – DigitalJedi805

+0

Solo indica que se está dirigiendo a una audiencia global. Tenlo en mente. – Oded

+0

Se eliminó 'Buenas tardes' según http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts, resolviendo así el problema. – dsolimano

Respuesta

16

Microsoft requiere que usted sea un administrador para ejecutar este método por la misma razón que ha encontrado.

Aquí es su explicación (de the MSDN documentation):

Para buscar una fuente de eventos en Windows Vista y versiones posteriores o Windows Server 2003, debe tener privilegios administrativos.

El motivo de este requisito es que se deben buscar todos los registros de eventos, incluida la seguridad, para determinar si el origen del evento es único. Comenzando con Windows Vista, los usuarios no tienen permiso para acceder al registro de seguridad; por lo tanto, se lanza una SecurityException.

La forma de solucionarlo dependerá completamente de lo que necesite hacer exactamente. La mejor recomendación si no puede iniciar sesión como administrador es intentar realizar su acción en un bloque try/catch y, si se lanza una SecurityException, realice alguna acción alternativa.

+0

Buena explicación, y gracias, pero me parece que me falta la parte donde mi cuenta local (remota o no) ES un miembro del grupo Administradores. Como tal, debería conservar los privilegios administrativos, ¿no es así? – DigitalJedi805

+1

Ran VS2010 como administrador parecía arreglar esto para mi entorno de depuración, como mínimo. Gracias por el consejo. – DigitalJedi805

8

El acceso a algunos EventLogs requiere elevación. Ejecute la aplicación como administrador en su lugar.

+0

Me estoy quedando sin un entorno de depuración conectado como administrador del sistema. Deberia ser suficiente? – DigitalJedi805

+0

Iniciar sesión como administrador no es suficiente: la aplicación debe iniciarse con privilegios elevados. –

+0

Ran VS2010 como administrador parecía arreglar esto para mi entorno de depuración, por lo menos. Gracias por el consejo. – DigitalJedi805

0

Recomiendo usar Logging Application Block de Enterprise Library para implementar el registro correcto.

empezar a leer desde here

+1

El código en cuestión no es código de registro. Está buscando la existencia de un LogSource por lo que no está claro qué tan relevante es su sugerencia. Por lo que sabemos, la aplicación es responsable de leer los registros –

Cuestiones relacionadas