ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND 与 Windows EWT

ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND with Windows EWT

我正在尝试将一个非常简单的日志打印到 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 中打开已编译的 .dll.exe 文件轻松验证您的 .rc 文件是否已正确编译到您的项目中。转到 File->Open->File 并打开您的可执行文件或库。现在检查是否可以看到编译后的 ETW 资源文件。在我的项目中,它位于文件夹 "WEVT_TEMPLATE" 中。如果您没有在您的二进制文件中看到它,那么您可能还没有将它编译到您的二进制文件中。为此,请将您的 .rc 添加到您的项目中(选择添加资源)。

旁注:还请验证清单文件中的 ResourceFileName 和 messageFileName 是否正确指向您的库或可执行文件。

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

wevtutil im yourProvider.man

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

wevtutil gp yourProvider

希望对您有所帮助。

我发现这是一个权限问题,就像 Access is denied while register provider (wevtutil) 中一样。我通过将我的项目放在我的 C 驱动器的根目录来纠正这个问题。