ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND with Windows EWT

ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND with Windows EWT

本文关键字:with Windows EWT FOUND TEMPLATE EVT EVENT ERROR NOT      更新时间:2023-10-16

我正在尝试将非常简单的日志打印到 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

我已经查看了注册提供程序(wevtutil)时拒绝访问,但它没有解决问题。

通过在

Visual Studio 中打开已编译的.dll.exe文件,可以轻松验证.rc文件是否正确编译到项目中。转到File->Open->File并打开可执行文件或库。现在检查是否可以看到已编译的 ETW 资源文件。在我的项目中,它位于文件夹"WEVT_TEMPLATE"中。如果在二进制文件中看不到它,则可能尚未将其编译到二进制文件中。为此,请将.rc添加到项目中(选择添加资源)。

旁注:还请验证清单文件中的资源文件名和消息文件名是否正确指向您的库或可执行文件。

在命令提示符下运行注册命令后。

wevtutil im yourProvider.man

您可以通过在之后运行以下命令来检查提供程序注册以及可能的错误:

wevtutil gp yourProvider

希望有帮助。

我发现这是一个权限问题,就像在注册提供程序(wevtutil)时拒绝访问一样。我通过将我的项目放在 C 驱动器的根目录来纠正这一点。