writeentry log example eventlog event createeventsource c# .net service windows-services event-log

c# - example - Permisos de escritura EventLog



event log c# (2)

Mi pregunta está relacionada con los permisos de escritura en el Registro de eventos de Windows. He examinado varias publicaciones sobre este tema y he encontrado algunas formas de resolver mi problema, pero ninguna de ellas es aceptable para mi situación actual.

Yo uso C # en .NET 4.0. Uso la clase EventLog : clase EventLog

En resumen, necesito ver si hay una manera de suplantar o autenticar con un usuario autenticado y una contraseña para obtener el derecho que necesito para escribir en el registro de eventos. El servidor siempre estará en la familia de servidores de Windows, pero la versión puede variar.

Mi aplicación es un servicio de Windows que se ejecuta con una de las siguientes cuentas:

  • Servicio de red
  • Servicio local
  • Sistema local
  • Usuario con derechos restringidos (usuarios o grupos de usuarios de dominio)

Aquí hay algunos otros criterios que tengo:

  • No puedo poner al usuario del servicio como Administrador, ni siquiera como administrador local en el servidor
  • No puedo editar o alterar el registro.
  • No puedo alterar el UAC o las políticas de grupo en el servidor
  • Tengo un usuario con derechos de administrador, pero no puedo usarlo para ejecutar el servicio
  • El registro de eventos siempre será el registro de eventos local, no en una máquina remota
  • El registro probablemente siempre será el registro de "aplicación"
  • La Fuente puede variar , y ese parece ser el núcleo del problema

Mi pregunta es: ¿Es esto posible?

¿Puedo suplantar a un usuario en mi código para lograr lo que necesito? Hago eso cuando me conecto a servicios web, iniciando sesión en servidores smtp y courseclogging en bases de datos, etc.

Me tropecé en esta clase: EventLogPermission Class

Pero parece que no puedo entender bien cómo usar la clase.

Espero haber expresado bien mi problema. No considero esto un duplicado de otra publicación debido a mis criterios.


De forma predeterminada, cualquier usuario autenticado puede escribir en el registro de eventos de la aplicación. Sin embargo, solo los administradores pueden crear nuevos orígenes de eventos. Si todas las fuentes de eventos se conocen en el momento de la instalación del servicio, recomiendo registrar esas fuentes con anticipación, entonces todo estará configurado. Registrarse es una simple llamada a EventLog.CreateEventSource .

Si necesita más flexibilidad en los orígenes de eventos, puede personalizar los permisos. Esos valores predeterminados se pueden personalizar ajustando una clave de registro:

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Eventlog/Application/CustomSD

Un proceso descrito en este artículo de KB . Una herramienta wevtutil , que es parte del sistema operativo, disponible en Server 2008 y superior, lo hace un poco más fácil que ir a través de regedit.


La respuesta demostró ser "no".

Me doy cuenta de que no hay una buena manera de resolver esto de la manera que solicité. Debe haber un trabajo manual hecho

Por lo tanto, la solución que escojo para este escenario es que los clientes que no pueden ejecutar el servicio como administrador o realizar una edición de registro manual no pueden usar las funciones relacionadas con el registro en el registro de eventos. Y haré posible habilitar y deshabilitar el registro desde la configuración.

El usuario administrador y la edición de registro son formas conocidas para mí, pero como dije, intenté evitarlo. Pero eso es, como parece, no es posible según mis criterios esta vez.