[C#] 소스를 찾을 수 없지만 일부 또는 모든 이벤트 로그를 검색 할 수 없습니다

다음과 같은 예외가 발생합니다. 레지스트리 편집의 Eventlogs에서 Asp.net 계정을 완전히 제어했습니다.

[SecurityException : 소스를 찾을 수 없지만 일부 또는 모든 이벤트 로그를 검색 할 수 없습니다. 액세스 할 수없는 로그 : 보안.]

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

이것이 서버의 일부 구성 문제 때문이라고 생각합니까?



답변

EventLog.SourceExists하위 키를 열거 HKLM\SYSTEM\CurrentControlSet\services\eventlog하여 지정된 이름의 하위 키가 포함되어 있는지 확인합니다. 코드가 실행중인 사용자 계정에 Security대상 소스를 찾기 전에 액세스하려는 하위 키 (귀하의 경우 하위 키)에 대한 읽기 액세스 권한이없는 경우 설명한 것과 같은 예외가 표시됩니다.

이러한 문제를 처리하는 일반적인 방법 은 설치시 (관리자 계정으로) 이벤트 로그 소스등록한 다음 런타임에 존재한다고 가정하여 대상 이벤트 로그 소스가 실제로 존재하지 않는 경우 결과 예외가 예상치 못한 것으로 처리되도록하는 것입니다. 런타임에.


답변

같은 예외가 있었다. 제 경우에는 관리자 권한으로 명령 프롬프트를 실행해야했습니다.

시작 메뉴에서 명령 프롬프트를 마우스 오른쪽 단추로 클릭하고 “관리자 권한으로 실행”을 선택하십시오.


답변

나를 위해이 오류는 관리자 권한으로 실행되지 않는 명령 프롬프트로 인한 것입니다. 명령 프롬프트를 마우스 오른쪽 버튼으로 클릭하고 ” 관리자 권한으로 실행 “이라고 말해야합니다 .

서비스를 설치하거나 제거하려면 관리자 역할이 필요합니다.


답변

“관리자 권한으로”개발자 명령 행을 실행하십시오. 이 계정은 보안 로그에 대한 전체 액세스 권한이 있습니다


답변

나를 위해 일하지 않았다.

새로운 키와 문자열 값을 만들고 작동하도록 관리했습니다.

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


답변

나를 위해 방금 iisreset 작업했습니다 (관리자 권한으로 cmd를 실행-> iisreset). 누군가가 시도해 볼 수도 있습니다.


답변

액세스 할 수없는 로그 : 보안

새 이벤트 소스는 보안 (읽을 때 관리자 권한이 필요함)을 포함한 모든 로그 에서 고유 한 이름 을 가져야 합니다 .

소스를 만들려면 앱에 관리자 권한 이 필요 합니다. 그러나 그것은 아마도 과잉 일 것입니다.

필자는이 Powershell 스크립트 를 작성하여 원하는대로 이벤트 소스를 작성했습니다. 로 저장 *.ps1하고 그것을 실행하는 모든 특권과 그 자체를 높이는 것입니다.

# 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');