Estoy trabajando para intentar portar una aplicación ASP.NET desde Server 2003 (e IIS6) a Server 2008 (IIS7).
Cuando intento visitar la página del navegador, obtengo esto:
Error del servidor en la aplicación '/'.
Excepcion de seguridad
Descripción: la aplicación intentó realizar una operación no permitida por la política de seguridad. Para otorgar a esta aplicación el permiso requerido, comuníquese con el administrador del sistema o cambie el nivel de confianza de la aplicación en el archivo de configuración.
Detalles de la excepción: System.Security.SecurityException: no se encontró el origen, pero no se pudieron buscar algunos o todos los registros de eventos. Registros inaccesibles: seguridad
Error de fuente:
Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de la pila de excepciones a continuación.
Seguimiento de pila:
[SecurityException: no se encontró la fuente, pero no se pudieron buscar algunos o todos los registros de eventos. Registros inaccesibles: seguridad.]
System.Diagnostics.EventLog.FindSourceRegistration (String source, String machineName, Boolean readOnly) +562 System.Diagnostics.EventLog.SourceExists (String source, String machineName) +251
[recorte]
Estas son las cosas que he hecho para tratar de resolverlo:
Otorgue permiso de acceso completo a "Todos" a la clave
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security
. Esto funcionó. Pero, naturalmente, no puedo hacer esto en producción. Así que eliminé el permiso "Todos" después de ejecutar la aplicación durante unos minutos y el error volvió a aparecer.Creé la fuente en el registro de la aplicación y el registro de seguridad (y verifiqué que existe a través de regedit) durante la instalación con permisos elevados, pero el error permaneció.
Le di a la aplicación un nivel de confianza total en el
web.config
archivo (y usandoappcmd.exe
) pero fue en vano.
¿Alguien tiene una idea de lo que podría hacerse aquí?
PD: Este es un seguimiento de esta pregunta . Seguí las respuestas dadas pero fue en vano (ver # 2 arriba).
Respuestas:
Para dar
Network Service
permiso de lectura sobre laEventLog/Security
clave (como lo sugieren Firenzi y royrules22), siga las instrucciones de http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspxStart
entoncesRun
regedt32
oregedit
Navegue / expanda a la siguiente clave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security
Haga clic derecho en esta entrada y seleccione Permisos
Agregar al
Network Service
usuarioDarle permiso de lectura
ACTUALIZACIÓN: Los pasos anteriores están bien en máquinas de desarrolladores, donde no utiliza el proceso de implementación para instalar la aplicación.
Sin embargo, si implementa su aplicación en otras máquinas, considere registrar las fuentes de registro de eventos durante la instalación como se sugiere en las respuestas de SailAvid y Nicole Calinoiu .
Estoy usando la función PowerShell (llamando a Octopus Deploy.ps1)
fuente
El problema es que
EventLog.SourceExists
intenta acceder a laEventLog\Security
clave, acceso que solo está permitido para un administrador.Un ejemplo común para iniciar sesión en un programa de C #
EventLog
es:Sin embargo, las siguientes líneas fallan si el programa no tiene permisos de administrador y la clave no se encuentra debajo,
EventLog\Application
yaEventLog.SourceExists
que luego intentará accederEventLog\Security
.Por lo tanto, la forma recomendada es crear un script de instalación, que crea la clave correspondiente, a saber:
Entonces se pueden eliminar esas dos líneas.
También puede crear un
.reg
archivo para crear la clave de registro. Simplemente guarde el siguiente texto en un archivocreate.reg
:fuente
La solución fue dar permiso de lectura de la cuenta "Servicio de red" en la clave EventLog / Security.
fuente
Para mí, la concesión de permisos de 'Lectura' para 'NetworkService' a toda la rama 'EventLog' funcionó.
fuente
Tuve un problema muy similar con un programa de consola que desarrollo bajo VS2010 (actualizado desde VS2008 bajo XP) Mi programa utiliza EnLib para realizar algunos registros. El error se activó porque EntLib no tenía permiso para registrar un nuevo origen de eventos.
Así que comencé una vez que mi programa compilado como Administrador : registró el origen del evento. Luego volví a desarrollar y depurar desde dentro de VS sin problema.
(también puede consultar http://www.blackwasp.co.uk/EventLog_3.aspx , me ayudó
fuente
Esta excepción me estaba ocurriendo desde una aplicación de consola .NET que se ejecutaba como una tarea programada, y estaba tratando de hacer básicamente lo mismo: crear una nueva Fuente de eventos y escribir en el registro de eventos.
Al final, configurar los permisos completos para el usuario bajo el cual se ejecutaba la tarea en las siguientes teclas fue el truco para mí:
fuente
eventlog\Application
yeventlog\Security
; Se requiere control totaleventlog
solo en la raíz.Intento casi todo aquí para resolver este problema ... Comparto aquí la respuesta que me ayuda:
en http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx , gracias Michael Freidgeim
fuente
Me encontré con el mismo problema, pero tuve que subir un nivel y dar acceso completo a todos a la clave HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \, en lugar de bajar a la seguridad, eso me solucionó el problema.
fuente
Mismo problema en Windows 7 64bits. Ejecutar como administrador resolvió el problema.
fuente
Se debe crear una nueva clave con el nombre de origen en HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Application en el regEdit cuando usa System.Diagnostics.EventLog.WriteEntry ("SourceName", "ErrorMessage", EventLogEntryType.Error);
Entonces, básicamente, su usuario no tiene permiso para crear la clave. Puede hacer lo siguiente según el usuario que esté utilizando desde el valor de Identidad en la configuración avanzada del grupo de aplicaciones:
Haga clic derecho en la tecla EventLog y seleccione la opción Permisos ... 3. Agregue a su usuario con acceso de Control total.
-Si está utilizando "NetworkService" agregue usuario de SERVICIO DE RED
-Si está utilizando "ApplicationPoolIdentity" agregue IIS APPPOL {nombre de su grupo de aplicaciones} (use la ubicación de la máquina local cuando busque al usuario).
-Si está utilizando "LocalSystem", asegúrese de que el usuario tenga permisos de administrador. No se recomienda para vulnerabilidades.
Repita los pasos del 1 al 3 para HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Security
Para la depuración con Visual Studio utilizo "NetworkService" (es usuario de ASP.NET) y cuando se publica el sitio utilizo "AppicationPoolIdentity".
fuente
FYI ... mi problema fue que accidentalmente seleccioné "Servicio local" como la Cuenta en las propiedades de ProcessInstaller en lugar de "Sistema local". Solo menciono a cualquier otra persona que siguió el tutorial de MSDN como la selección del Servicio local se muestra primero y no estaba prestando mucha atención ...
fuente
Parece haber una solución obvia para esto que todavía no he visto un gran inconveniente, al menos cuando no es práctico obtener derechos administrativos para crear su propia fuente de eventos: use una que ya esté allí.
Los dos que he comenzado a utilizar son ".Net Runtime" y "Application Error", que parecen estar presentes en la mayoría de las máquinas.
Las principales desventajas son la incapacidad de agruparse por ese evento, y que probablemente no tenga una ID de evento asociada, lo que significa que la entrada del registro puede estar prefijada con algo como "Descripción de la ID de evento 0 de la fuente .Net No se puede encontrar el tiempo de ejecución ... "si lo omite, pero el registro entra y la salida se ve ampliamente sensata.
El código resultante termina pareciéndose a:
Por supuesto, dado que siempre existe la posibilidad de que esté en una máquina que no tiene esas fuentes de eventos por cualquier razón, es probable que desee
try {} catch{}
envolverlo en caso de que falle y empeore las cosas, pero los eventos ahora se pueden guardar.fuente
No estoy trabajando en IIS, pero tengo una aplicación que arroja el mismo error en un cuadro 2K8. Funciona bien en una caja de 2K3, imagínate.
Mi resolución fue "Ejecutar como administrador" para otorgarle a la aplicación derechos elevados y todo funcionará correctamente. Espero que esto ayude a guiarte en la dirección correcta.
Windows 2008 es derechos / permisos / elevación es realmente diferente de Windows 2003, gar.
fuente
Hola, me encontré con el mismo problema cuando estaba desarrollando una aplicación y quería instalarla en una PC remota, lo solucioné haciendo lo siguiente:
1) Pase a su registro, busque: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application (??? YOUR_SERVICE_OR_APP_NAME ???)
Tenga en cuenta que "(??? YOUR_SERVICE_OR_APP_NAME ???)" es el nombre del servicio de su aplicación tal como lo definió cuando creó su implementación de .NET, por ejemplo, si denominó a su nueva aplicación "Mi nueva aplicación", la clave sería: HKLM \ System \ CurrentControlSet \ Services \ EventLog \ Application \ My New app
Nota 2: Dependiendo del evento en el que esté escribiendo, puede encontrar en su cuadro DEV, \ Aplicación \ (como se indicó anteriormente), o también (\ Sistema) o (\ Seguridad) dependiendo del evento en el que está escribiendo su aplicación, principalmente , (\ Application) debería estar bien todo el tiempo.
2) Estar en la tecla de arriba, desde el menú; Seleccione "ARCHIVO" -> "Exportar", y luego guarde el archivo. (Nota: Esto crearía la configuración de registro necesaria cuando la aplicación necesite acceder a esta clave para escribir en el Visor de eventos), el nuevo archivo será un archivo .REG, por el argumento, llámelo "Mi nueva aplicación.REG "
3) Al implementar en PRODuction, consulte al administrador del sistema del servidor (SA), entregue el archivo "My New App.REG" junto con la aplicación y solicite a la SA que instale este archivo REG, una vez hecho (como administrador) esto cree la clave para su aplicación.
4) Ejecute su aplicación, no debería necesitar acceder a nada más que esta clave.
El problema ya debería estar resuelto.
Porque:
Al desarrollar una aplicación que escriba cualquier cosa en el EventLog, requeriría una CLAVE para ello en el registro de Eventlog si no se encuentra esta clave, intentaría crearla, lo que luego falla por no tener permisos para hacerlo. El proceso anterior es similar a la implementación de una aplicación (manualmente), mientras que la estamos creando nosotros mismos, y no es necesario tener un dolor de cabeza ya que no está modificando el registro al agregar permisos a TODOS, lo que es un riesgo seguro en los servidores de producción.
Espero que esto ayude a resolverlo.
fuente
Aunque la respuesta del instalador es una buena respuesta, no siempre es práctica cuando se trata de software que no escribió. Una respuesta simple es crear el registro y el origen del evento utilizando el comando PowerShell New-EventLog ( http://technet.microsoft.com/en-us/library/hh849768.aspx )
Ejecute PowerShell como administrador y ejecute el siguiente comando cambiando el nombre de registro y la fuente que necesita.
New-EventLog -LogName Application -Source TFSAggregator
Lo usé para resolver la excepción del registro de eventos cuando Aggregator ejecuta un problema desde codeplex.
fuente
Tuve un problema similar con todos nuestros servidores de 2008. El registro de seguridad dejó de funcionar por completo debido a un GPO que llevó al grupo Usuarios autenticados y leyó el permiso de la clave
HKLM\System\CurrentControlSet\Services\EventLog\security
Poner esto de nuevo por recomendación de Microsoft corrigió el problema. Sospecho que leer a todos los usuarios autenticados en un nivel superior también corregirá su problema.
fuente
Golpeé problema similar - en mi caso contenía Fuente
<
,>
caracteres. Las máquinas de 64 bits están utilizando un nuevo registro par - base xml, diría yo, y estos caracteres (establecidos a partir de una cadena) crean un xml no válido que causa una excepción. Podría decirse que esto debería considerarse un problema de Microsoft: no manejar la Fuente (nombre / cadena) correctamente.fuente
La solución es muy simple: ¡ejecute la aplicación Visual Studio en modo administrador!
fuente
Mi aplicación se instala en los servidores web del cliente. En lugar de jugar con los permisos del Servicio de red y el registro, opté por verificar
SourceExists
y ejecutarCreateEventSource
mi instalador.También agregué un try / catch
log.source = "xx"
en la aplicación para establecerlo en una fuente conocida si no se creó mi fuente de evento (Esto solo aparecería si intercambiara en caliente un .dll en lugar de reinstalarlo).fuente
intente a continuación en web.config
fuente
Tuve este problema al ejecutar una aplicación dentro de VS. Todo lo que tenía que hacer era ejecutar el programa como Administrador una vez, luego podría ejecutarlo desde VS.
Para ejecutar como Administrador, simplemente navegue a su carpeta de depuración en el explorador de Windows. Haga clic derecho en el programa y elija Ejecutar como administrador.
fuente
Reconstruir la solución funcionó para mí
fuente