警告 – 无法访问运行wevtutil的提供程序资源

我需要帮助解决“提供者”资源尝试创buildWindows事件提供程序时不可访问我创build我的清单文件与ManGen实用程序,并命名我的.exe文件作为我的消息和资源文件我编译' .rc'文件与我的exe文件和期望的'.res'文件生成。但是,当我运行wevtutil时,我不断收到'资源不可访问'的警告。

当你安装清单(例如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. 

对于上述,它看起来像资源没有得到正确编译。

如果你使用VS进行File->Open ,并在资源浏览器中打开你的exe文件,你应该能够看到编译好的资源。至少应该有一个“WEVT_TEMPLATE”条目。

为了正确编译资源, csc需要按如下方式传递资源:

 csc /win32res:<Resource.res> 

您正在注册的DLL需要有一组特定的文件权限。 我怀疑事件记录服务在“本地服务”帐户下运行。 所以只要给SYSTEM权限是不够的。 我通过给PC上的“用户”组“读取和执行”权限来解决问题。

我遇到了一个讨厌的问题,花了一天的时间来追查。 我分享了我的项目工作文件夹,然后取消共享。 出于某种原因,这删除了“用户”访问权限。 我认为这是比Windows SDK中的事件跟踪样例复制所有DLL到C驱动器下的特殊文件夹并从那里安装提供程序的原因。 在C驱动器下创建文件夹时,USERS组将被自动授予访问权限。

我有完全相同的错误,但解决方案与已发布的其他答案略有不同。 我不得不打开清单文件并更改resourceFileNamemessageFileName属性以使用应用程序可执行文件的绝对路径

我遇到了类似的问题。 解决的办法是

  • 尽可能使用绝对路径,远离相对路径
  • 确保每个人都有读取清单文件的权限

如果你的清单文件被称为manifest.manmanifest.dll ,那么

  • 授予读者访问权限

    icacls %~dp0\manifest.* /t /grant Everyone:R

  • 使用绝对路径进行安装(如果使用的是批处理文件,则可以使用%~dp0变量)

    wevtutil im %~dp0\manifest.man /rf:"%~dp0\manifest.dll" /mf:"%~dp0\manifest.dll"