Мне нужна помощь в разрешении ресурсов "Поставщика", недоступных при попытке создать поставщик событий Windows. Я создаю файл манифеста с помощью утилиты ManGen и назову свой файл ".exe" как файл моего сообщения и ресурса. скомпилируйте файл ".rc" с моим exe файлом и создадим файл expect..res. Однако, когда я запускаю wevtutil, я продолжаю получать предупреждение "ресурсы недоступны".
ПРЕДУПРЕЖДЕНИЕ -Передайте ресурсы, недоступные для запуска wevtutil
Ответ 1
Когда вы устанавливаете манифест (например, wevtutil im manifest.man
), вы должны увидеть какое-то предупреждение, если ресурсы недоступны:
**** Warning: Publisher EventsProvider resources are not accessible.
Чтобы получить дополнительную информацию, попробуйте получить информацию об одном из издателей. Например:
c:\...> wevtutil gp <EventProviderName>
Failed to open metadata for publisher <EventProviderName>. Access denied.
Хорошо, приведенное выше предлагает проблему с разрешениями, поэтому позвольте мне сделать путь доступным и повторите попытку:
c:\...> wevtutil gp <EventProviderName>
Failed to open metadata for publisher <EventProviderName>. The specified resource
type cannot be found in the image file.
Для вышесказанного, похоже, что ресурс не скомпилировался правильно.
Если вы перейдете File->Open
с помощью VS и откройте exe в средстве просмотра ресурсов, вы сможете увидеть ресурсы, которые были скомпилированы. У вас должна быть хотя бы запись "WEVT_TEMPLATE".
Для правильного компиляции ресурса csc
необходимо передать ресурс следующим образом:
csc /win32res:<Resource.res>
Ответ 2
Для регистрации DLL необходимо иметь определенный набор разрешений для файлов. Я подозреваю, что служба регистрации событий работает под учетной записью "локальная служба". Поэтому просто предоставить права доступа к системе недостаточно. Я решил проблему, предоставив группе "ПОЛЬЗОВАТЕЛИ" на моем ПК "читать и выполнять" привилегии.
Я столкнулся с неприятной проблемой, которая заняла день, чтобы отследить. Я поделился рабочей папкой проекта, а затем разделил ее. По какой-то причине это исключило права доступа "ПОЛЬЗОВАТЕЛИ". Я думаю, что это причина, по которой образцы трассировки событий в SDK Windows копируют все DLL в специальную папку под диском C и устанавливают там провайдера. Когда вы создаете папки под диском C, группе USERS предоставляется доступ автоматически.
Ответ 3
У меня была такая же ошибка, но решение было немного иным, чем другие ответы, которые уже были опубликованы. Мне пришлось открыть файл манифеста и изменить атрибуты resourceFileName
и messageFileName
, чтобы использовать абсолютные пути к исполняемому файлу приложения.
Ответ 4
У меня возникла аналогичная проблема. Решение -
- используйте, по возможности, абсолютные пути и избегайте относительных путей
- убедитесь, что все пользователи имеют доступ к файлам манифеста.
Если ваши файлы манифеста называются manifest.man
и manifest.dll
, то
-
предоставить доступ для чтения всем
icacls %~dp0\manifest.* /t /grant Everyone:R
-
использовать абсолютные пути для установки (переменная
%~dp0
может использоваться, если вы используете пакетный файл)wevtutil im %~dp0\manifest.man /rf:"%~dp0\manifest.dll" /mf:"%~dp0\manifest.dll"