오류 문제 해결: 이벤트 메시지를 찾을 수 없음

이 문서는 이벤트 뷰어 이벤트 메시지를 찾을 수 없음의 오류를 해결하는 데 도움이 됩니다.

원래 제품 버전: Windows
원본 KB 번호: 166902

증상

이벤트 뷰어 이벤트에 대해 다음과 같은 오류 메시지가 나타날 수 있습니다.

원본(<애플리케이션 이름>)의 이벤트 ID( <####> )에 대한 설명을 찾을 수 없습니다. ReportEvent>에서 기록된 메시지의 텍스트는 다음과 같은 삽입 문자열<을 포함합니다.

아래는 가능한 원인과 문제를 resolve 방법에 대한 자세한 정보입니다. 원인은 다음 중 하나 이상일 수 있습니다.

잘못된 원본 이름 매개 변수가 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에 제대로 바인딩하지 않습니다. 리소스를 ID 1로 표시하고 11(RT_MESSAGETABLE)을 입력하기 때문에 메시지 컴파일러에서 출력되는 .rc 파일을 사용해야 합니다. 이벤트 뷰어 메시지 리소스를 찾는 데 필요합니다.

Visual C++를 사용하여 DLL을 빌드 EventMessageFile 하는 경우 메시지 컴파일러에서 출력되는 .rc 파일을 Visual C++ 프로젝트의 원본 파일로 추가해야 합니다. Visual C++에게 .rc 파일을 컴파일한 다음 리소스를 DLL에 연결하도록 지시합니다.

올바른 ID가 ReportEvent 함수에 전달되었는지 확인합니다.

많은 사람들이 파일에 있는 리터럴 ID 번호가 .mc 올바른 ID라고 생각합니다. 메시지 컴파일러가 ID 번호를 LOWORD 로 비트 RS하고 비트 RS로 심각도 및 기능 비트를 로 변환 HIWORD하기 때문에 그렇지 않습니다. 애플리케이션은 항상 메시지 컴파일러에서 출력되는 헤더 파일의 기호 이름을 사용해야 합니다.

파일에서 MessageIdTypedef= 문을 확인합니다 .mc . 일부 예제 .mc 파일은 범주 ID에 대해 을 WORD 정의하는 MessageIDTypedef 방법을 보여 줍니다. 그러나 이벤트 ID가 을 느슨하게 HIWORD합니다. 이 문제를 해결하려면 한 번만 정의 MessageIdTypedef= 하고 로 설정합니다 DWORD.

또한 MC -c 명령줄이 메시지 리소스 및 헤더 파일에 일관되게 사용되는지 확인합니다. 스위치는 -c 메시지 ID의 에서 HIWORD 조금 켜집니다.

EventMessageFile 항목을 추가한 이후 이벤트 뷰어 다시 시작되지 않습니다.

이벤트 뷰어 이벤트 원본에 대해 로드하는 DLL을 캐시합니다. 이벤트 뷰어가 시작된 후 적절한 디렉터리 또는 원본 이름을 지정하도록 레지스트리를 변경한 경우 이벤트 뷰어 다시 시작해야 합니다.