Подтвердить что ты не робот

ПРЕДУПРЕЖДЕНИЕ -Передайте ресурсы, недоступные для запуска wevtutil

Мне нужна помощь в разрешении ресурсов "Поставщика", недоступных при попытке создать поставщик событий Windows. Я создаю файл манифеста с помощью утилиты ManGen и назову свой файл ".exe" как файл моего сообщения и ресурса. скомпилируйте файл ".rc" с моим exe файлом и создадим файл expect..res. Однако, когда я запускаю wevtutil, я продолжаю получать предупреждение "ресурсы недоступны".

4b9b3361

Ответ 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"