Устранение ошибки: сообщение о событии не найдено

Эта статья поможет устранить ошибку в Просмотр событий: сообщение о событии не найдено.

Исходная версия продукта: Windows
Исходный номер базы знаний: 166902

Симптомы

Для событий в Просмотр событий может появиться следующее сообщение об ошибке:

Не удалось найти описание идентификатора события ( <####> ) в источнике (<имя> приложения). Он содержит следующие строки вставки: <текст сообщения, зарегистрированного 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 без пути и наличии нескольких файлов с одинаковыми именами. Просмотр событий следует правилам для поиска источника сообщения с помощью алгоритма поиска, описанного в комментариях к API LoadLibrary.

Ресурсы сообщений не привязаны к источнику EventMessageFile

В версию примера ведения журнала не удалось включить RC-файл как часть сборки в makefile. В результате создается библиотека DLL, но в сборку не включаются ресурсы сообщений. Некоторые разработчики пытались включить в качестве ресурса файл .bin, который является выходными данными компилятора сообщений. Он неправильно привязывает ресурс к библиотеке DLL. Необходимо использовать RC-файл, который является выходными данными компилятора сообщений, так как он помечает ресурс идентификатором 1 и типом 11 (RT_MESSAGETABLE). Он необходим для Просмотр событий для поиска ресурсов сообщений.

Если вы используете Visual C++ для сборки EventMessageFile БИБЛИОТЕКи DLL, необходимо добавить RC-файл, который является выходными данными компилятора сообщений, в качестве исходного файла проекта Visual C++. Он сообщит Visual C++ о компиляции RC-файла, а затем привязывает ресурсы к библиотеке DLL.

Убедитесь, что в функцию ReportEvent передан правильный идентификатор.

Многие считают, что литеральный идентификатор, найденный .mc в файле, является правильным идентификатором. Это не так, так как компилятор сообщений битового OR номер идентификатора LOWORD в и битовые OR серьезности и объекта битов в HIWORD. Приложение всегда должно использовать символическое имя в файле заголовка, который выводится компилятором сообщений.

Проверьте инструкцию MessageIdTypedef= в .mc файле. В некоторых примерах .mc файлов показано, как определить значение для MessageIDTypedefWORD идентификаторов категорий. Однако это приводит к тому, что идентификаторы событий теряют значение HIWORD. Чтобы устранить эту проблему, определите MessageIdTypedef= только один раз и присвойте ему значение DWORD.

Кроме того, убедитесь, что командная строка MC -c последовательно используется для ресурсов сообщений и файла заголовка. Переключатель -c включает немного в HIWORD идентификаторе сообщения.

Просмотр событий не перезапускается с момента добавления записи EventMessageFile

Просмотр событий кэширует библиотеки DLL, которые загружается для источников событий. Если вы изменили реестр для присвоения правильного каталога или исходного имени после запуска средства просмотра событий, необходимо перезапустить Просмотр событий.