Nie znaleziono źródła, ale nie można przeszukać niektórych lub wszystkich dzienników zdarzeń

125

Otrzymuję następujący wyjątek. Dałem pełną kontrolę nad kontem Asp.net w dziennikach zdarzeń w edycji rejestru.

[SecurityException: Nie znaleziono źródła, ale nie można przeszukać niektórych lub wszystkich dzienników zdarzeń. Niedostępne dzienniki: zabezpieczenia.]

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

Myślę, że jest to spowodowane problemem z konfiguracją na serwerze?

Vaibhav Jain
źródło
Opublikowałem swoją odpowiedź, a moderator ją usunął. Upewnij się, że usługa działa jako system lokalny, ale nie inny, ponieważ system lokalny może tworzyć tylko dzienniki zdarzeń i źródła. Uruchomiłem moją usługę jako usługę sieciową i dostałem ten wyjątek. Później zatrzymałem usługę i uruchomiłem ponownie jako system lokalny i działało dobrze, a następnie zatrzymałem i ponownie uruchomiłem usługę jako usługę sieciową i działała dobrze.
Ziggler

Odpowiedzi:

105

EventLog.SourceExistswylicza podklucze of, HKLM\SYSTEM\CurrentControlSet\services\eventlogaby sprawdzić, czy zawiera podklucz o określonej nazwie. Jeśli konto użytkownika, na którym działa kod, nie ma dostępu do odczytu do podklucza, do którego próbuje uzyskać dostęp (w twoim przypadku, Securitypodklucza) przed znalezieniem źródła docelowego, zobaczysz wyjątek podobny do tego, który opisałeś.

Typowe podejście do rozwiązywania takich problemów polega na zarejestrowaniu źródeł dziennika zdarzeń w czasie instalacji (na koncie administratora), a następnie założeniu, że istnieją one w czasie wykonywania, dzięki czemu każdy wynikowy wyjątek może być traktowany jako nieoczekiwany, jeśli docelowe źródło dziennika zdarzeń w rzeczywistości nie istnieje W czasie wykonywania.

Nicole Calinoiu
źródło
26
W systemie Windows 8 wydaje się, że nawet gdy UAC jest wyłączony ORAZ użytkownik jest administratorem, nadal konieczne jest uruchamianie VS jako administrator. to jest rozwiązanie w moim przypadku
itsho
2
U mnie wystarczyło uruchomić aplikację jako Administrator dopiero za pierwszym razem. Następnie zostało utworzone źródło zdarzenia, a aplikacja działała poprawnie.
thomaskonrad
2
to jest przykład, jak Windows zniechęca do korzystania z wbudowanych narzędzi w systemie operacyjnym
Felice Pollano
67

Miał ten sam wyjątek. W moim przypadku musiałem uruchomić wiersz polecenia z prawami administratora.

W menu Start kliknij prawym przyciskiem myszy Wiersz polecenia, wybierz opcję „Uruchom jako administrator”.

miłość na żywo
źródło
2
Moja sytuacja to uruchomienie Visual Studio 2015 jako administrator. (wykonuję projekt Web API.)
Kevin .NET
9

U mnie ten błąd był spowodowany wierszem poleceń, który nie działał z uprawnieniami administratora. Musisz kliknąć prawym przyciskiem myszy wiersz polecenia i powiedzieć „ Uruchom jako administrator ”.

Aby zainstalować lub odinstalować usługę, potrzebujesz roli administratora.

Raza
źródło
Grzebałem przez około 2 godziny, dzięki stary!
Mox Shah
8

Uruchom wiersz poleceń programisty „Jako administrator”. To konto ma pełny dostęp do dziennika zabezpieczeń

dmolisher
źródło
6

Nie działa dla mnie.

Utworzyłem nowy klucz i wartość ciągu i udało mi się go uruchomić

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
źródło
Zrobiłem to samo. Właśnie utworzyłem nowy klucz z nazwą źródła, której używam w mojej aplikacji i zadziałało.
Campinho,
1

U mnie właśnie działał iisreset (uruchom cmd jako administrator -> iisreset). Może ktoś mógłby spróbować.

Miroslav Bihari
źródło
1

Niedostępne dzienniki: bezpieczeństwo

Nowe źródło zdarzeń musi mieć unikalną nazwę we wszystkich dziennikach, w tym w zabezpieczeniach (które wymagają uprawnień administratora podczas odczytu).

Twoja aplikacja będzie więc potrzebować uprawnień administratora, aby utworzyć źródło. Ale to prawdopodobnie przesada.

Napisałem ten skrypt PowerShell, aby dowolnie tworzyć źródło zdarzeń. Zapisz go jako *.ps1i uruchom z dowolnymi uprawnieniami, a sam się podniesie.

# 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
źródło
1

Niedawno doświadczyłem błędu i żadne z rozwiązań nie zadziałało. Rozwiązaniem problemu było dodanie użytkownika puli aplikacji do grupy Użytkownicy zaawansowani w zarządzaniu komputerem. Nie mogłem użyć grupy Administrator z powodu zasad firmy.

Mandi
źródło
0

Jeśli wykonujesz nową instalację witryny sieci Web SenseNet TaskManagement w usługach IIS (z kodu źródłowego, a nie WebPI), zostanie wyświetlony ten komunikat, zwykle związany z komunikacją SignalR. Jak wskazuje @ nicole-caliniou, przyczyną jest niepowodzenie wyszukiwania klucza w rejestrze.

Aby rozwiązać ten problem w przypadku SenseNet TaskManagement v1.1.0, najpierw znajdź nazwę klucza rejestru w pliku web.config. Domyślnie jest to „SnTaskWeb”.

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

Otwórz edytor rejestru regedit.exei przejdź do HKLM\SYSTEM\CurrentControlSet\Services\EventLog\SnTask. Kliknij prawym przyciskiem myszy SnTask i wybierz New Keyi nazwij klucz SnTaskWebdla konfiguracji pokazanej powyżej. Następnie kliknij prawym przyciskiem myszy SnTaskWebelement i wybierz New Expandable String Value. Nazwa powinna być, EventMessageFilea dane wartości powinny być C:\Windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll.

Słowa kluczowe: sygnalizator, sensenet, regedit, uprawnienia

Thane Plummer
źródło
0

Jeśli chcesz tylko wąchać, czy Źródło istnieje na komputerze lokalnym, ale nie masz możliwości uzyskania autoryzacji, aby to zrobić, możesz przejrzeć je za pomocą następującego przykładu (VB).

To omija błąd bezpieczeństwa. Możesz w podobny sposób zmodyfikować tę funkcję, aby zwrócić LogName dla źródła.

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
źródło