警告 - 运行wevtutil时无法访问提供者资源

时间:2012-02-09 18:34:02

标签: windows events provider etw

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

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:12)

您注册的dll需要具有一组特定的文件权限。我怀疑事件记录服务在“本地服务”帐户下运行。所以仅仅给予SYSTEM访问权限是不够的。我通过在我的电脑上给“USERS”小组“读取和执行”特权来解决问题。

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

答案 2 :(得分:8)

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

答案 3 :(得分:6)

我遇到了类似的问题。解决方案是

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

如果您的清单文件名为manifest.manmanifest.dll,则

  • 授予所有人读取权限

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

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

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