Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden


125

Ich erhalte die folgende Ausnahme. Ich habe dem Asp.net-Konto in Eventlogs in der Registrierungsbearbeitung die volle Kontrolle gegeben.

[SecurityException: Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Unzugängliche Protokolle: Sicherheit.]

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

Ich denke, das liegt an einem Konfigurationsproblem auf dem Server?



Ich habe meine Antwort gepostet und der Moderator hat sie gelöscht. Stellen Sie sicher, dass Sie Ihren Dienst als lokales System ausführen, jedoch nicht als anderes, da das lokale System nur Ereignisprotokolle und -quellen erstellen kann. Ich habe meinen Dienst als Netzwerkdienst ausgeführt und diese Ausnahme erhalten. Später habe ich den Dienst gestoppt und als lokales System neu gestartet und es hat gut funktioniert. Danach habe ich meinen Dienst als Netzwerkdienst gestoppt und neu gestartet und es hat gut funktioniert.
Ziggler

Antworten:


105

EventLog.SourceExistsZählt die Unterschlüssel von HKLM\SYSTEM\CurrentControlSet\services\eventlogauf, um festzustellen , ob sie einen Unterschlüssel mit dem angegebenen Namen enthalten. Wenn das Benutzerkonto, unter dem der Code ausgeführt wird, keinen Lesezugriff auf einen Unterschlüssel hat, auf den es zugreifen möchte (in Ihrem Fall dasSecurity möchte Unterschlüssel), bevor Zielquelle gefunden wird, wird eine Ausnahme wie die von Ihnen beschriebene angezeigt.

Der übliche Ansatz zur Behandlung solcher Probleme besteht darin , Ereignisprotokollquellen zur Installationszeit (unter einem Administratorkonto) zu registrieren und dann davon auszugehen, dass sie zur Laufzeit vorhanden sind, sodass eine resultierende Ausnahme als unerwartet behandelt werden kann, wenn eine Zielereignisprotokollquelle nicht vorhanden ist zur Laufzeit.


26
Unter Windows 8 scheint es auch dann erforderlich zu sein, VS als Administrator auszuführen, wenn die Benutzerkontensteuerung deaktiviert ist UND der Benutzer Administrator ist. Das ist die Lösung für meinen Fall
itsho

2
Für mich war es ausreichend, die Anwendung nur beim ersten Mal als Administrator auszuführen. Danach wurde die Ereignisquelle erstellt und die Anwendung funktionierte einwandfrei.
Thomaskonrad

2
Dies ist ein Beispiel dafür, wie Windows davon abhält, die eingebetteten Tools im Betriebssystem zu verwenden
Felice Pollano

67

Hatte die gleiche Ausnahme. In meinem Fall musste ich die Eingabeaufforderung mit Administratorrechten ausführen.

Klicken Sie im Startmenü mit der rechten Maustaste auf Eingabeaufforderung und wählen Sie "Als Administrator ausführen".


2
Meine Situation ist, Visual Studio 2015 als Administrator auszuführen. (macht ein Web-API-Projekt.)
Kevin .NET

9

Für mich war dieser Fehler auf die Eingabeaufforderung zurückzuführen, die nicht unter Administratorrechten ausgeführt wurde. Sie müssen mit der rechten Maustaste auf die Eingabeaufforderung klicken und " Als Administrator ausführen" sagen .

Sie benötigen eine Administratorrolle, um einen Dienst zu installieren oder zu deinstallieren.


Ich habe ungefähr 2 Stunden lang gefummelt, danke Kumpel!
Mox Shah

8

Starten Sie die Developer-Befehlszeile "Als Administrator". Dieses Konto hat vollen Zugriff auf das Sicherheitsprotokoll


6

Hat nicht für mich gearbeitet.

Ich habe einen neuen Schlüssel- und Zeichenfolgenwert erstellt und es geschafft, ihn zum Laufen zu bringen

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

Ich tat das gleiche. Ich habe gerade einen neuen Schlüssel mit dem Quellnamen erstellt, den ich in meiner Anwendung verwende, und es hat funktioniert.
Campinho

1

Bei mir hat gerade iisreset funktioniert (cmd als Administrator ausführen -> iisreset). Vielleicht könnte es jemand versuchen.


1

Unzugängliche Protokolle: Sicherheit

Eine neue Ereignisquelle muss in allen Protokollen einen eindeutigen Namen haben, einschließlich Sicherheit (für die beim Lesen Administratorrechte erforderlich sind).

Ihre App benötigt also Administratorrechte , um eine Quelle zu erstellen. Aber das ist wahrscheinlich ein Overkill.

Ich habe dieses Powershell-Skript geschrieben , um die Ereignisquelle nach Belieben zu erstellen. Speichern Sie es als *.ps1und führen Sie es mit einem beliebigen Privileg aus, und es wird sich selbst erhöhen.

# 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

Ich habe kürzlich den Fehler festgestellt, und keine der Lösungen hat bei mir funktioniert. Was den Fehler für mich behoben hat, war das Hinzufügen des Anwendungspoolbenutzers zur Hauptbenutzergruppe in der Computerverwaltung. Ich konnte die Administratorgruppe aufgrund einer Unternehmensrichtlinie nicht verwenden.


0

Wenn Sie eine Neuinstallation der SenseNet TaskManagement-Website auf IIS durchführen (aus dem Quellcode, nicht aus WebPI), wird diese Meldung angezeigt, die normalerweise mit der SignalR-Kommunikation zusammenhängt. Wie @ nicole-caliniou betont, ist eine Schlüsselsuche in der Registrierung .

Um dies für SenseNet TaskManagement v1.1.0 zu beheben, suchen Sie zuerst den Namen des Registrierungsschlüssels in der Datei web.config. Standardmäßig ist es "SnTaskWeb".

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

Öffnen Sie den Registrierungseditor regedit.exeund navigieren Sie zu HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Klicken Sie mit der rechten Maustaste auf SnTask, wählen Sie New Keyden Schlüssel SnTaskWebfür die oben gezeigte Konfiguration aus und benennen Sie ihn . Klicken Sie dann mit der rechten Maustaste auf das SnTaskWebElement und wählen Sie New Expandable String Value. Der Name sollte sein EventMessageFileund die Wertdaten sollten sein C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Schlüsselwörter: signalr, sensenet, regedit, Berechtigungen


0

Wenn Sie nur schnüffeln möchten, wenn auf dem lokalen Computer eine Quelle vorhanden ist, aber keine Berechtigung dazu erhalten, können Sie das folgende Beispiel (VB) verwenden.

Dies umgeht den Sicherheitsfehler. Sie können diese Funktion auch ändern, um den Protokollnamen für die Quelle zurückzugeben.

Public Shared Function eventLogSourceExists(sSource as String) as Boolean
    Try
        EventLog.LogNameFromSourceName(sSource, ".")
        Return True
    Catch
        Return False
    End Try
End Function
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.