ВНИМАНИЕ! Ресурсы провайдера недоступны при работе с wevtutil - PullRequest
14 голосов
/ 09 февраля 2012

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

Ответы [ 4 ]

14 голосов
/ 06 марта 2012

Когда вы устанавливаете манифест (например, 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>
12 голосов
/ 26 октября 2012

DLL, которую вы регистрируете, должен иметь определенный набор прав доступа к файлу.Я подозреваю, что служба регистрации событий работает под учетной записью "local service".Так что просто дать права доступа SYSTEM недостаточно.Я решил проблему, предоставив группе «ПОЛЬЗОВАТЕЛИ» на моем ПК права «читать и выполнять».

Я столкнулся с неприятной проблемой, которая заняла целый день, чтобы выследить.Я поделился рабочей папкой своего проекта, а затем отменил ее.По какой-то причине это лишило привилегий доступа «ПОЛЬЗОВАТЕЛЕЙ».Я думаю, что это причина, по которой примеры трассировки событий в Windows SDK копируют все dll в специальную папку на диске C и устанавливают провайдера оттуда.Когда вы создаете папки на диске C, группа ПОЛЬЗОВАТЕЛЕЙ получает доступ автоматически.

8 голосов
/ 15 апреля 2014

У меня была точно такая же ошибка, но решение немного отличалось от других ответов, которые уже были опубликованы.Мне пришлось открыть файл манифеста и изменить атрибуты resourceFileName и messageFileName, чтобы использовать абсолютные пути к исполняемому файлу приложения.

6 голосов
/ 23 сентября 2015

Я столкнулся с подобной проблемой. Решение для

  • используйте абсолютные пути везде, где это возможно, и держитесь подальше от относительных путей
  • убедитесь, что у всех есть доступ на чтение к файлам манифеста

Если ваши файлы манифеста называются 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"

...