【问题标题】:WARNING -Provider resources not accessible running wevtutil警告 - 运行 wevtutil 时无法访问提供程序资源
【发布时间】:2012-03-02 06:24:10
【问题描述】:

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

【问题讨论】:

    标签: windows events provider etw


    【解决方案1】:

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

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

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

    • 向所有人授予读取权限

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果运行wevtutil gp <Publisher>,则此解决方案是应用程序输出无法打开发布者的元数据。 系统找不到指定的文件。
      • 如果清单文件中的路径名与 dll 所在的位置不匹配,您可以使用 /mf 和 /rf 选项以及指向实际位置的绝对路径。您还需要确保该位置也已授予 MACHINE_NAME\Users 安全组权限。
      • 在为 Chrome 处理此问题时,我不断收到此错误,唯一好的解决方案是使用 /mf 和 /rf。我不明白为什么我会失败(它以前对我有用)但它现在正在工作。奇怪的是,当使用 procmon 进行跟踪时,wevtutil.exe 没有从 DLL 读取的迹象。这使得研究这个警告变得非常困难。
      【解决方案3】:

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

      我遇到了一个棘手的问题,花了一天时间才找到。我共享了我的项目工作文件夹,然后取消共享。由于某种原因,这删除了“用户”访问权限。我认为这就是 Windows SDK 中的事件跟踪示例将所有 dll 复制到 C 驱动器下的特殊文件夹并从那里安装提供程序的原因。当您在 C 盘下创建文件夹时,USERS 组将自动获得访问权限。

      【讨论】:

      • 这有帮助!完全忽略了安全设置! :)
      【解决方案4】:

      当您安装清单时(例如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-&gt;Open 并在资源查看器中打开你的 exe,你应该能够看到编译的资源。你至少应该有一个“WEVT_TEMPLATE”条目。

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

      csc /win32res:<Resource.res>
      

      【讨论】:

        猜你喜欢
        • 2011-12-23
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        相关资源
        最近更新 更多