오류 문제 해결: 이벤트 메시지를 찾을 수 없음
- 아티클
- 2023. 07. 17.
이 문서의 내용
- 증상
- 잘못된 원본 이름 매개 변수가 RegisterEventSource에 전달됨
- 레지스트리의 .dll 또는 .exe 파일 경로가 잘못되었습니다.
- 등록된 메시지 원본이 잘못된 .dll 또는 .exe 파일입니다.
이 문서에서는 이벤트 뷰어: 이벤트 메시지를 찾을 수 없음의 오류를 해결하는 데 도움이 됩니다.
원래 제품 버전: Windows
원래 KB 번호: 166902
증상
이벤트 뷰어 이벤트에 대해 다음과 같은 오류 메시지가 나타날 수 있습니다.
원본(애플리케이션 이름>)의 이벤트 ID(<<####>)에 대한 설명을 찾을 수 없습니다. 여기에는 ReportEvent에서 기록된 메시지의 텍스트인 다음과 같은 삽입 문자열 <이 포함됩니다>.
아래는 가능한 원인과 문제를 해결하는 방법에 대한 자세한 정보입니다. 원인은 다음 중 하나 이상일 수 있습니다.
잘못된 원본 이름 매개 변수가 RegisterEventSource에 전달됨
레지스트리의 원본 이름이 전달된 이름과 일치하는지 확인합니다 RegisterEventSource. 이 함수는 레지스트리에서 원본을 찾을 수 없는 경우에도 성공합니다. 레지스트리의 원본 이름은 .의 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog하위 키에 있어야 합니다.
일반적으로 애플리케이션 원본은 애플리케이션 하위 키 아래에 나열됩니다.
레지스트리의 .dll 또는 .exe 파일 경로가 잘못되었습니다.
찾은 레지스트리 값 EventMessageFile 에서 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\sourcename.dll 또는 .exe 파일의 경로가 올바르고 .dll 또는 .exe 파일의 이름이 올바른지 확인합니다. 이 경우 이벤트 뷰어 애플리케이션이 메시지 리소스의 원본을 로드하지 못합니다. 또한 다른 매크로를 사용하는 %SystemRoot% 경우 REG_EXPAND_SZ 레지스트리 값 형식을 사용해야 합니다. 그렇지 않으면 매크로가 확장되지 않습니다.
등록된 메시지 원본이 잘못된 .dll 또는 .exe 파일입니다.
찾은 레지스트리 EventMessageFile 값에서 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\sourcename.dll 또는 .exe 파일의 경로가 예상된 메시지 리소스를 포함하는 경로인지 확인합니다. 경로 없이 EventMessageFile 나열하고 이름이 같은 파일이 여러 대 있는 경우 주의해야 합니다. 이벤트 뷰어 LoadLibrary API에 대한 주석에 설명된 검색 알고리즘을 사용하여 메시지 원본을 찾는 규칙을 따릅니다.
메시지 리소스가 EventMessageFile 원본에 바인딩되지 않음
로깅 샘플 버전이 빌드의 일부로 .rc 파일을 메이크파일에 포함하지 못했습니다. 따라서 DLL이 빌드되지만 빌드에 메시지 리소스가 포함되지 않습니다. 일부 개발자는 메시지 컴파일러의 출력인 .bin 파일을 리소스로 포함하려고 했습니다. 리소스를 DLL에 제대로 바인딩하지 않습니다. 리소스를 1 및 형식 11(RT_MESSAGETABLE)로 표시하므로 메시지 컴파일러에서 출력되는 .rc 파일을 사용해야 합니다. 이벤트 뷰어 메시지 리소스를 찾는 데 필요합니다.
Visual C++를 사용하여 DLL을 빌드 EventMessageFile 하는 경우 메시지 컴파일러에서 출력되는 .rc 파일을 Visual C++ 프로젝트의 원본 파일로 추가해야 합니다. Visual C++에게 .rc 파일을 컴파일한 다음 리소스를 DLL에 연결하도록 지시합니다.
올바른 ID가 ReportEvent 함수에 전달되었는지 확인합니다.
대부분의 경우 파일에 있는 리터럴 ID 번호가 .mc 올바른 ID라고 생각합니다. 메시지 컴파일러가 ID 번호를 비트 RS로 가져오고 비트 RS에 LOWORD 대한 심각도 및 기능 비트가 .에 들어오 HIWORD기 때문에 그렇지 않습니다. 애플리케이션은 항상 메시지 컴파일러에서 출력되는 헤더 파일의 기호 이름을 사용해야 합니다.
파일의 MessageIdTypedef= 문을 확인합니다 .mc . 일부 예제 .mc 파일은 범주 ID에 대해 to WORD 를 MessageIDTypedef 정의하는 방법을 보여 줍니다. 그러나 이벤트 ID가 느슨해지 HIWORD도록 합니다. 이 문제를 해결하려면 한 번만 정의 MessageIdTypedef= 하고 .로 DWORD설정합니다.
또한 MC -c 명령줄이 메시지 리소스 및 헤더 파일에 일관되게 사용되는지 확인합니다. 스위치는 -c 메시지 ID에서 HIWORD 조금 켜집니다.
EventMessageFile 항목을 추가한 이후 이벤트 뷰어 다시 시작되지 않습니다.
이벤트 뷰어 이벤트 원본에 대해 로드하는 DLL을 캐시합니다. 이벤트 뷰어가 시작된 후 적절한 디렉터리 또는 원본 이름을 지정하도록 레지스트리를 변경한 경우 이벤트 뷰어 다시 시작해야 합니다.
'[Microsoft]' 카테고리의 다른 글
Authenticode 서명된 실행 파일에서 정보 가져오기 (0) | 2023.11.03 |
---|---|
User32.dll 또는 Kernel32.dll 초기화되지 않음 (0) | 2023.11.03 |
SetSystemTimeAdjustment는 16 미만의 조정을 잃을 수 있습니다. (0) | 2023.11.03 |
MSXML 사용은 .NET 애플리케이션에서 지원되지 않습니다. (0) | 2023.11.03 |
DST를 포함하는 날짜 및 시간 처리 (1) | 2023.11.03 |