.Net 4.5 EventSource ETW提供程序未显示在提供程序列表中

时间:2013-07-10 01:04:33

标签: .net-4.5 etw etw-eventsource

我一直在使用.NET4.5新功能ETW(EventSource)。我无法使用perfmon-> Data Collector Sets将其显示在跟踪提供程序列表中。我能够使用perfview查看日志。 我能够使用其静态方法GenerateManifest从EventSource类生成清单。这将在EventSource类中提供myevents的清单,但它不包含有关通道的详细信息。

我的问题是如何在为perfmon跟踪会话生成清单文件后添加通道特定信息?我还想使用Perfmon的Tracing会话来启用提供程序而不是perfview。

非常感谢任何输入。

2 个答案:

答案 0 :(得分:9)

MS发布了一个Nuget包,它在build:

之后注册了EventSource类

http://blogs.msdn.com/b/dotnet/archive/2013/08/09/announcing-the-eventsource-nuget-package-write-to-the-windows-event-log.aspx

  

注册您的EventSource

     

安装EventSource NuGet包时,构建步骤   前面提到过为每个文件生成以下文件   应用程序中的EventSource:

<AssemblyName>.<EventSourceTypeName>.etwManifest.man
<AssemblyName>.<EventSourceTypeName>.etwManifest.dll.
     

需要在操作系统中注册这些文件才能启用   渠道支持。为此,请在运行后运行以下命令   文件位于其最终部署位置:

wevtutil.exe im <EtwManifestManFile> /rf:"<EtwManifestDllFile>" /mf:"<EtwManifestDllFile>"
     

执行此注册命令后,所有后续调用   MinimalEventSource.Log.Load()来自该机器上的任何进程   自动导致Windows事件日志中的事件。

注册后,您应该在阅读已安装提供商的所有工具中看到它。

答案 1 :(得分:0)

即使您确实修改了清单,EventSource实现也会阻止您指定通道。将事件写入ETW时,您将传递描述符块,其中指定了通道ID。不幸的是,EventSource没有提供通过属性或其他方式设置此方法的方法,并始终将此设置为零,这意味着不使用任何通道。

EventSource的行为与普通的ETW提供程序略有不同,因为它不通过win32资源公开其清单,而是发送一个“已知”ETW事件,清单作为其有效负载。这就是为什么perfmon是唯一能够识别从.NET 4.5 EventSource发送的*事件的ETW工具。

*你总是可以使用perfmon或类似的其他工具接收事件,但是他们无法解码有效载荷,例如传递给WriteEvent的参数。

编辑:See answer to a similar question

干杯   拉斯