No se encontró la fuente, pero no se pudieron buscar algunos o todos los registros de eventos

125

Recibo la siguiente excepción. Le he dado control total a la cuenta de Asp.net en Eventlogs en la edición del Registro.

[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, Boolean wantToCreate) +664
System.Diagnostics.EventLog.SourceExists(String source, String machineName, Boolean wantToCreate) +109
System.Diagnostics.EventLog.SourceExists(String source) +14 Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher.VerifyValidSource() +41

Supongo que esto se debe a algún problema de configuración en el servidor.

Vaibhav Jain
fuente
Posible duplicado de System.Security.SecurityException al escribir en Event Log
Michael Freidgeim
Publiqué mi respuesta y el moderador la eliminó. Asegúrese de ejecutar su servicio como sistema local, pero no de otro modo, ya que el sistema local solo puede crear registros de eventos y orígenes. Estaba ejecutando mi servicio como servicio de red y obtuve esta excepción. Más tarde detuve el servicio y reinicié como sistema local y funcionó bien y después de eso detuve y reinicié mi servicio como servicio de red y funcionó bien.
Ziggler

Respuestas:

105

EventLog.SourceExistsenumera a través de las subclaves de HKLM\SYSTEM\CurrentControlSet\services\eventlogpara ver si contiene una subclave con el nombre especificado. Si la cuenta de usuario con la que se ejecuta el código no tiene acceso de lectura a una subclave a la que intenta acceder (en su caso, la Securitysubclave) antes de encontrar la fuente de destino, verá una excepción como la que ha descrito.

El enfoque habitual para manejar estos problemas es registrar las fuentes de registro de eventos en el momento de la instalación (bajo una cuenta de administrador), luego asumir que existen en tiempo de ejecución, permitiendo que cualquier excepción resultante sea tratada como inesperada si una fuente de registro de eventos objetivo no existe realmente en tiempo de ejecución.

Nicole Calinoiu
fuente
26
En Windows 8, parece que incluso cuando UAC está deshabilitado Y el usuario es Administrador, aún es necesario ejecutar VS como Administrador. esa es la solución en mi caso
itsho
2
Para mí, fue suficiente ejecutar la aplicación como Administrador solo la primera vez. Después de eso, se creó el origen del evento y la aplicación funcionó bien.
thomaskonrad
2
Este es un ejemplo de cómo Windows desalienta el uso de herramientas integradas en el sistema operativo
Felice Pollano
67

Tenía la misma excepción. En mi caso, tuve que ejecutar el símbolo del sistema con derechos de administrador.

Desde el menú Inicio, haga clic derecho en Símbolo del sistema, seleccione "Ejecutar como administrador".

vive el amor
fuente
2
La situación mía es ejecutar Visual Studio 2015 como administrador. (haciendo un proyecto de API web.)
Kevin .NET
9

Para mí, este error se debió al símbolo del sistema, que no se ejecutaba con privilegios de administrador. Debe hacer clic derecho en el símbolo del sistema y decir " Ejecutar como administrador ".

Necesita la función de administrador para instalar o desinstalar un servicio.

Raza
fuente
Estuve buscando alrededor de 2 horas, ¡Gracias amigo!
Mox Shah
8

Inicie la línea de comandos del desarrollador "Como administrador". Esta cuenta tiene acceso completo al registro de seguridad

dmolisher
fuente
6

No funcionó para mí.

Creé una nueva clave y un valor de cadena y logré que funcionara

Key= HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\<Your app name>\
String EventMessageFile value=C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll
Mike Hart
fuente
Yo hice lo mismo. Acabo de crear una nueva clave con el nombre de origen que estoy usando dentro de mi aplicación y funcionó.
Campinho
1

Para mí simplemente trabajé iisreset (ejecute cmd como administrador -> iisreset). Quizás alguien podría intentarlo.

Miroslav Bihari
fuente
1

Registros inaccesibles: seguridad

Un nuevo origen de eventos debe tener un nombre único en todos los registros, incluida Seguridad (que necesita privilegios de administrador cuando se está leyendo).

Por lo tanto, su aplicación necesitará privilegios de administrador para crear una fuente. Pero eso es probablemente una exageración.

Escribí este script de PowerShell para crear la fuente del evento a voluntad. Guárdelo como *.ps1y ejecútelo con cualquier privilegio y se elevará solo.

# CHECK OR RUN AS ADMIN

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{   
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

# CHECK FOR EXISTENCE OR CREATE

$source = "My Service Event Source";
$logname = "Application";

if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
    [System.Diagnostics.EventLog]::CreateEventSource($source, $logname);
    Write-Host $source -f white -nonewline; Write-Host " successfully added." -f green;
}
else
{
    Write-Host $source -f white -nonewline; Write-Host " already exists.";
}

# DONE

Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
Bizhan
fuente
1

Recientemente experimenté el error, y ninguna de las soluciones funcionó para mí. Lo que resolvió el error para mí fue agregar el usuario del grupo de aplicaciones al grupo de usuarios avanzados en la administración de computadoras. No pude usar el grupo Administrador debido a una política de la empresa.

Mandi
fuente
0

Si está realizando una nueva instalación del sitio web SenseNet TaskManagement en IIS (desde el código fuente, no WebPI), recibirá este mensaje, generalmente relacionado con la comunicación SignalR. Como señala @ nicole-caliniou, se debe a una búsqueda clave en el Registro que falla.

Para resolver esto para SenseNet TaskManagement v1.1.0, primero encuentre el nombre de la clave de registro en el archivo web.config. Por defecto es "SnTaskWeb".

 <appSettings>
   <add key="LogSourceName" value="SnTaskWeb" />

Abra el editor del registro regedit.exe, y navegue hasta HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Haga clic derecho en SnTask y seleccione New Key, y asigne un nombre a la clave SnTaskWebpara la configuración que se muestra arriba. Luego haga clic derecho en el SnTaskWebelemento y seleccione New Expandable String Value. El nombre debe ser EventMessageFiley los datos del valor deben ser C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Palabras clave: señalizador, sensenet, regedit, permisos

Thane Plummer
fuente
0

Si solo quiere rastrear si existe una Fuente en la máquina local pero no tiene la capacidad de obtener autorización para hacerlo, puede buscarlo en el siguiente ejemplo (VB).

Esto evita el error de seguridad. De manera similar, podría modificar esta función para devolver el LogName para la Fuente.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Timothy C. Quinn
fuente