在尝试创建windows事件提供程序时,我需要帮助解决“提供者”资源不可访问的问题。我使用ManGen实用程序创建清单文件,并将“.exe”文件命名为消息和资源文件。我使用可执行文件编译“.rc”文件,并生成预期的“.res”文件。但是,当我运行wevtutil时,我一直收到“资源不可访问”的警告。
发布于 2012-03-07 02:59:59
当您安装您的清单(例如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>发布于 2012-10-27 00:14:42
您要注册的dll需要具有一组特定的文件权限。我怀疑事件日志服务是在“本地服务”帐户下运行的。因此,仅仅给予系统访问权限是不够的。我通过在我的PC上给“用户”组“读和执行”的特权来解决问题。
我遇到了一个严重的问题,花了一天的时间才找到。我共享了我的项目工作文件夹,然后又取消了共享。由于某些原因,这删除了“用户”访问权限。我认为这就是windows SDK中的事件跟踪示例将所有all复制到C驱动器下的一个特殊文件夹并从那里安装提供程序的原因。当您在C盘下创建文件夹时,USERS组将自动获得访问权限。
发布于 2014-04-15 21:16:13
我犯了完全相同的错误,但解决方案与已经发布的其他答案略有不同。我必须打开清单文件并更改resourceFileName和messageFileName属性,以使用应用程序可执行文件的绝对路径。
https://stackoverflow.com/questions/9216675
复制相似问题