我正在尝试将非常简单的日志打印到Windows事件查看器。当我在.cpp文件中调用EventWrite()
时,在事件查看器中收到错误代码15003 ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND
,并且未显示我的消息。我认为我遇到的问题是,即使我将清单拖到解决方案资源管理器中的资源文件夹中,编译清单时生成的.rc
文件也不会与项目一起被编译。
当我在wevtutil.exe
中注册清单时,收到以下警告:Publisher ExampleProvider resources are not accessible
。当我询问有关此错误的详细信息时,会收到以下输出:Failed to open metadata for publisher ExampleProvider. Access is denied
。
我已经查看过Access is denied while register provider (wevtutil),但无法解决问题。
最佳答案
通过在Visual Studio中打开已编译的.rc
或.dll
文件,可以轻松地验证.exe
文件是否已正确编译到项目中。转到File->Open->File
并打开您的可执行文件或库。现在检查是否可以看到已编译的ETW资源文件。在我的项目中,它位于文件夹“ WEVT_TEMPLATE”中。如果您没有在二进制文件中看到它,则可能是您尚未将其编译为二进制文件。为此,将.rc
添加到项目中(选择添加资源)。
旁注:请还确认清单文件中的ResourceFileName和messageFileName正确指向您的lib或可执行文件。
在命令提示符下运行注册命令后。wevtutil im yourProvider.man
之后,您可以通过运行以下命令来检查提供程序的注册以及可能的错误:wevtutil gp yourProvider
希望能有所帮助。