Я пытаюсь распечатать очень простой журнал в средстве просмотра Windows. Когда я звоню EventWrite()
в моем файле .cpp я получаю код ошибки 15003 ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND
в окне просмотра событий мое сообщение не отображается. Я думаю, проблема в том, что .rc
файл, сгенерированный при компиляции моего манифеста, не компилируется вместе с проектом, даже если я перетащил его в папку ресурсов в обозревателе решений.
Когда я зарегистрировал свой манифест в wevtutil.exe
Я получаю следующее предупреждение: Publisher ExampleProvider resources are not accessible
Когда я спрашиваю подробности об этой ошибке, я получаю этот вывод: Failed to open metadata for publisher ExampleProvider. Access is denied
,
Я уже посмотрел на Доступ запрещен во время регистрации провайдера (wevtutil) и это не решило проблему.
Вы можете легко проверить, является ли ваш .rc
файл правильно скомпилирован в ваш проект, открыв ваш скомпилированный .dll
или же .exe
файл в Visual Studio. Идти к File->Open->File
и откройте свой исполняемый файл или библиотеку. Теперь проверьте, можете ли вы увидеть скомпилированный файл ресурсов ETW. В моем проекте он находится в папке «WEVT_TEMPLATE». Если вы не видите его в своем двоичном файле, то, скорее всего, вы не скомпилировали его в свой двоичный файл. Для этого добавьте свой .rc
в ваш проект (Выберите добавить ресурс).
Примечание: Пожалуйста, также убедитесь, что ResourceFileName и messageFileName в вашем файле манифеста правильно указывают на вашу lib или исполняемый файл.
После запуска команды регистрации в командной строке.
wevtutil im yourProvider.man
Вы можете проверить регистрацию вашего провайдера, а также возможные ошибки, выполнив следующую команду:
wevtutil gp yourProvider
Надеюсь, это поможет.
Я понял, что это была проблема с разрешением, как в Доступ запрещен во время регистрации провайдера (wevtutil). Я исправил это, поместив свой проект в корень моего диска C.