IT이야기

소스에서 이벤트 ID에 대한 설명을 찾을 수 없습니다.

cyworld 2021. 9. 28. 21:20
반응형

소스에서 이벤트 ID에 대한 설명을 찾을 수 없습니다.


Windows 이벤트 로그에 로그를 작성할 때 아래와 같은 이벤트가 발생합니다. 이 메시지의 근본 원인은 무엇이며 어떻게 해결할 수 있습니까? 많은 감사

소스 RRWS에서 이벤트 ID 51001에 대한 설명을 찾을 수 없습니다. 이 이벤트를 발생시키는 구성 요소가 로컬 컴퓨터에 설치되어 있지 않거나 설치가 손상되었습니다. 로컬 컴퓨터에 구성 요소를 설치하거나 복구할 수 있습니다.

이벤트가 다른 컴퓨터에서 시작된 경우 디스플레이 정보를 이벤트와 함께 저장해야 했습니다.

이벤트에 포함된 정보는 다음과 같습니다.

테스트 로그 메시지

메시지 리소스가 있지만 문자열/메시지 테이블에서 메시지를 찾을 수 없습니다.


"EventCreate"를 사용하여 명령줄에서 응용 프로그램 로그 아래에 이벤트 소스를 만든 후 이 오류가 발생했습니다. 이 명령은 다음 아래에 새 키를 만듭니다.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application

사용자가 만든 됐어요 키를 보면 (예를 들어 SourceTest)라는 문자열 값이있을 것 EventMessageFile나를 위해 설정되었다 %SystemRoot%\System32\EventCreate.exe.

다음으로 변경 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

CustomSourceTypesSupported값을 삭제 합니다.

이렇게 하면 "이벤트 ID에 대한 설명...." 메시지가 중지됩니다.


시스템을 다시 시작하십시오!

제 친구도 똑같은 문제를 겪었습니다. 그는 설명된 모든 옵션을 시도했지만 아무 것도 작동하지 않는 것 같았습니다. Microsoft의 설명에 대한 많은 연구 끝에 그는 시스템을 다시 시작하기로 결론지었습니다. 효과가 있었다!!

운영 체제가 모든 경우에 등록된 이벤트 소스 목록을 새로 고치지는 않는 것 같습니다. 다시 시작한 후에야 이벤트 소스가 제대로 등록되었는지 확인할 수 있습니다.


실제 솔루션은 어떻습니까?

"사용자 지정 소스"(관리자 권한 필요)를 등록하거나 "메시지 파일"(작업 및 골칫거리 필요)을 제공하지 않고 이벤트 로그에 무언가를 기록하는 "빠르고 더러운" 방법 만 있으면 다음을 수행하십시오.

EventLog.WriteEntry(
    ".NET Runtime", //magic
    "Your error message goes here!!",
    EventLogEntryType.Warning,
    1000); //magic

이렇게 하면 성가신 "이벤트 ID 0에 대한 설명을 찾을 수 없습니다" 없이 기존 "응용 프로그램" 로그에 쓸 수 있습니다.

"마법" 부분에 대해 설명하고 싶다면 여기에서 블로그에 글을 남겼습니다 .


이벤트 소스와 이에 대한 메시지 파일을 생성해야 합니다. 코드는 다음과 같습니다.

var data = new EventSourceCreationData("yourApp", "Application");
data.MessageResourceFile = pathToYourMessageFile;
EventLog.CreateEventSource(data);

그런 다음 메시지 파일 을 만들어야 합니다 . 모든 것을 설명하는 기사 도 있습니다 (다 읽지는 않았지만 상당히 완성된 것 같습니다).


PowerShell을 사용하여 이벤트 로그 및 소스를 생성합니다.

New-EventLog -LogName MyApplicationLog `
    -Source MySource `
    -MessageResourceFile C:\windows\Microsoft.NET\Framework\v4.0.30319\EventLogMessages.dll

보고 있는 문제를 방지하려면 메시지 dll이 필요합니다.


나는 또한 비슷한 문제에 직면했다. 연구의 많은 일 후에 나는이 문서에 따라 단계를 확인 다음 않았다 http://www.codeproject.com/Articles/4166/Using-MC-exe-message-resources-and-the-NT-event-lo 모든 제자리에 있는 것 같았다. 한 가지를 제외하고 ..이 msdn을 우연히 발견했을 때 깨달았습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/aa363661(v=vs.85).aspx

마지막 단락에서 말했듯이.. '응용 프로그램이 RegisterEventSource를 호출하고 레지스트리에서 찾을 수 없는 소스 이름을 전달하면 이벤트 로깅 서비스는 기본적으로 응용 프로그램 로그를 사용합니다. 그러나 메시지 파일이 없기 때문에 이벤트 뷰어는 이벤트 식별자 또는 이벤트 범주를 설명 문자열에 매핑할 수 없으며 오류를 표시합니다. 이러한 이유로 응용 프로그램의 레지스트리에 고유한 이벤트 소스를 추가하고 메시지 파일을 지정해야 합니다.' 따라서 RegisterEventSource의 내 응용 프로그램 이름이 레지스트리의 응용 프로그램 이름과 일치하지 않습니다. 이 문제를 해결했고 이제 작동합니다... 따라서 이 문제가 발생하면 레지스트리 항목을 다시 확인하십시오.


또 다른 가능성으로 인해 발생했지만 이벤트 식별자( a 에서 "난독화"됨 #define)가 심각도오류 ( Event Identifiers 에 명시된 두 개의 상위 비트 )로 설정 하고 있었습니다 . 으로 이벤트 뷰어 이벤트 식별자 (낮은 순서 16 비트)를 표시하는 일치하지 않을 수 있습니다 ...

참고로 이 문제를 해결하고 수정하는 동안 자체 연구를 기반으로 한 일련의 팁을 정리했습니다.

  1. 로그 항목 " 메시지 리소스가 있지만 문자열/메시지 테이블에서 메시지를 찾을 수 없습니다 "로 끝나지 않는 경우 (원래 질문과 반대):

    • 레지스트리 정보가 누락되었음을 의미합니다.
    • 이벤트 소스 이름 및 레지스트리 키 다시 확인
  2. 레지스트리 정보를 추가/편집해야 하는 경우 다음 사항을 기억하십시오.

    • 이벤트 뷰어 다시 시작 ( KB166902의 항목 6 및 @JotaBe에 명시된 대로 )
    • 도움이 되지 않으면 Windows 이벤트 로그 / EventLog서비스를 다시 시작하십시오(또는 @BrunoBieri가 암시하는 대로 시스템을 다시 시작하십시오).
  3. 당신이 경우 하지 않는 , 마음을 사용자 정의 DLL 자원을 작성하려면 일반적으로 사용 이벤트 메시지 파일은 몇 가지주의를 가지고 :

    • 그들은 대부분의 경우를 다루려고 시도하는 많은 식별자를 보유합니다.
      • .NET EventLogMessages.dll(@Matt에서 암시한 대로)은0xFFFF
      • Windows EventCreate.exe"전용"0x3E9
    • 모든 항목에는 다음이 포함됩니다. %1
      • 즉, 첫 번째 문자열 표시됩니다.
      • 전달된 모든 문자열은 ReportEvent이벤트 세부 정보를 조사하여 계속 검사할 수 있습니다(원하는 이벤트를 선택하고 세부 정보 탭으로 이동하여 EventData 확장 ).
  4. 기록된 이벤트에서 여전히 " 찾을 수 없음 " 이 표시되는 경우 (원래 질문):

    • 사용 중인 이벤트 식별자 값을 다시 확인하십시오 (제 경우 에는 이벤트 식별자 한정자 부분이었습니다).
    • 이벤트 세부 정보(원하는 이벤트를 선택하고 세부 정보 탭으로 이동하여 시스템 확장 )를 실제 예제와 비교하십시오.

나에게 문제는 내 대상 프로필이 실수로 ".Net Framework 4 클라이언트 프로필"로 설정되었다는 것입니다. ".Net Framework 4"를 사용하여 해당 서비스를 다시 빌드했을 때 문제가 사라졌습니다!


예를 들어 서비스를 설치하는 동안 이벤트 소스가 생성되기 전에 이벤트 로그 뷰어를 열면 해당 오류 메시지가 표시됩니다. OS를 다시 시작할 필요가 없습니다. 이벤트 뷰어를 닫고 열기만 하면 됩니다.

참고: 사용자 지정 메시지 파일을 제공하지 않습니다. 이벤트 소스 생성은 Matt의 답변에 표시된 대로 기본 구성을 사용합니다 .


@Alex의 답변을 개선하여 다음을 제안합니다.

            using (EventLog eventLog = new EventLog("Application"))
            {
                //You cannot be sure if the current identity has permissions to register the event source.
                try
                {
                    if (System.Web.HttpRuntime.AppDomainAppId != null)
                    {
                        eventLog.Source = System.Web.HttpRuntime.AppDomainAppId;
                    }
                    else
                    {
                        eventLog.Source = Process.GetCurrentProcess().ProcessName;
                    }
                }
                catch (SecurityException)
                {
                    eventLog.Source = "Application";
                }

                eventLog.WriteEntry("Log message example", EventLogEntryType.Information, 1000);
            }

여기서 category매개변수 를 지정하지 않는 것이 중요합니다 . 하면, 이것은 .NET Runtime이른바 마법도 마찬가지

The description for Event ID <...> from source <...> cannot be found.

is going to appear.


This is usually caused by a program that writes into the event log and is then uninstalled or moved.

ReferenceURL : https://stackoverflow.com/questions/3412463/description-for-event-id-from-source-cannot-be-found

반응형