La fonte non è stata trovata, ma non è stato possibile cercare alcuni o tutti i registri degli eventi


125

Ricevo la seguente eccezione. Ho dato il pieno controllo all'account Asp.net su Eventlogs nella modifica del Registro di sistema.

[SecurityException: l'origine non è stata trovata, ma non è stato possibile cercare alcuni o tutti i registri degli eventi. Registri inaccessibili: Sicurezza.]

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

Immagino che ciò sia dovuto a qualche problema di configurazione sul server?



Ho pubblicato la mia risposta e il moderatore l'ha cancellata. Assicurati di eseguire il tuo servizio come sistema locale ma non altro poiché il sistema locale può creare solo registri e fonti di eventi. Stavo eseguendo il mio servizio come servizio di rete e ho ottenuto questa eccezione. Successivamente ho interrotto il servizio e riavviato come sistema locale e ha funzionato bene e successivamente ho interrotto e riavviato il mio servizio come servizio di rete e ha funzionato bene.
Ziggler,

Risposte:


105

EventLog.SourceExistsenumera attraverso le sottochiavi di HKLM\SYSTEM\CurrentControlSet\services\eventlogper vedere se contiene una sottochiave con il nome specificato. Se l'account utente con cui è in esecuzione il codice non ha accesso in lettura a una sottochiave a cui tenta di accedere (nel tuo caso, la Securitysottochiave) prima di trovare l'origine di destinazione, vedrai un'eccezione come quella che hai descritto.

L'approccio usuale per la gestione di tali problemi è quello di registrare le origini del registro eventi al momento dell'installazione (con un account amministratore), quindi supporre che esistano in fase di esecuzione, consentendo a qualsiasi eccezione risultante di essere considerata imprevista se in realtà non esiste una sorgente del registro eventi di destinazione in fase di esecuzione.


26
Su Windows 8, sembra che anche quando UAC è disabilitato E l'utente è Amministratore, è comunque necessario eseguire VS come Admin. questa è la soluzione sul mio caso
itsho

2
Per me, è stato sufficiente eseguire l'applicazione come amministratore solo la prima volta. Successivamente, l'origine dell'evento è stata creata e l'applicazione ha funzionato correttamente.
thomaskonrad,

2
questo è un esempio di come Windows scoraggia l'utilizzo degli strumenti incorporati nel sistema operativo
Felice Pollano,

67

Aveva la stessa eccezione. Nel mio caso, ho dovuto eseguire il prompt dei comandi con diritti di amministratore.

Dal menu Start, fai clic destro su Prompt dei comandi, seleziona "Esegui come amministratore".


2
La mia situazione è eseguire Visual Studio 2015 come amministratore. (facendo un progetto API Web.)
Kevin .NET

9

Per me questo errore era dovuto al prompt dei comandi, che non era in esecuzione con i privilegi di amministratore. È necessario fare clic destro sul prompt dei comandi e dire " Esegui come amministratore ".

È necessario il ruolo di amministratore per installare o disinstallare un servizio.


Stavo armeggiando da circa 2 ore, grazie amico!
Mox Shah,

8

Avviare la riga di comando per sviluppatori "Come amministratore". Questo account ha pieno accesso al registro di sicurezza


6

Non ha funzionato per me.

Ho creato una nuova chiave e valore stringa e sono riuscito a farlo funzionare

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

Ho fatto lo stesso. Ho appena creato una nuova chiave con il nome della fonte che sto usando all'interno della mia applicazione e ha funzionato.
Campinho,

1

Per me ho appena lavorato su iisreset (esegui cmd come amministratore -> iisreset). Forse qualcuno potrebbe provarlo.


1

Registri inaccessibili: sicurezza

Una nuova fonte di eventi deve avere un nome univoco in tutti i registri, inclusa la sicurezza (che necessita del privilegio di amministratore quando viene letto).

Quindi la tua app avrà bisogno del privilegio di amministratore per creare una fonte. Ma questo è probabilmente un eccesso.

Ho scritto questo script PowerShell per creare la fonte dell'evento a piacimento. Salvalo come *.ps1ed eseguilo con qualsiasi privilegio e si eleverà da 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');

1

Di recente ho riscontrato l'errore e nessuna delle soluzioni ha funzionato per me. Ciò che ha risolto l'errore per me è stato l'aggiunta dell'utente del pool di applicazioni al gruppo Power Users nella gestione dei computer. Non è stato possibile utilizzare il gruppo di amministratori a causa di una politica aziendale.


0

Se si sta eseguendo una nuova installazione del sito Web SenseNet TaskManagement su IIS (dal codice sorgente, non WebPI), verrà visualizzato questo messaggio, generalmente correlato alla comunicazione SignalR. Come sottolinea @ nicole-caliniou, la ricerca di chiavi nel Registro di sistema non riesce.

Per risolvere il problema con SenseNet TaskManagement v1.1.0, trovare innanzitutto il nome della chiave di registro nel file web.config. Di default è "SnTaskWeb".

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

Apri l'editor del registro regedit.exee vai a HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Fare clic con il tasto destro del mouse su SnTask e selezionare New Key, quindi denominare la chiave SnTaskWebper la configurazione mostrata sopra. Quindi fare clic con il tasto destro SnTaskWebsull'elemento e selezionare New Expandable String Value. Il nome dovrebbe essere EventMessageFilee i dati del valore dovrebbero essere C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Parole chiave: signalr, sensenet, regedit, permessi


0

Se vuoi solo annusare se esiste una sorgente sul computer locale ma non hai la possibilità di ottenere l'autorizzazione per farlo, puoi passare attraverso il seguente esempio (VB).

Questo evita l'errore di sicurezza. Allo stesso modo è possibile modificare questa funzione per restituire LogName per l'origine.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.