尝试使用 TraceProcessor 来访问 Windows 事件跟踪(ETW)记录中的数据。 TraceProcessor 允许以 .NET 对象身份访问 ETW 跟踪数据。
在本快速入门中,您将学习如何:
- 安装 TraceProcessing NuGet 包。
- 创建 TraceProcessor。
- 使用 TraceProcessor 访问跟踪中包含的进程命令行。
先决条件
Visual Studio 2019
安装 TraceProcessing NuGet 包
.NET TraceProcessing 可以通过以下包 ID 从 NuGet 获取:
Microsoft.Windows.EventTracing.Processing.All
可以在控制台应用中使用此包列出 ETW 跟踪(.etl 文件)中包含的进程命令行。
创建新的 .NET 控制台应用。 在 Visual Studio 中,选择“文件”、“新建”、“项目...”,然后选择 C# 的控制台应用模板。
输入项目名称,例如 TraceProcessorQuickstart,然后选择“创建”。
在解决方案资源管理器中,右键单击“依赖项”并选择“管理 NuGet 包...”并切换到“浏览”选项卡。
在“搜索”框中,输入 Microsoft.Windows.EventTracing.Processing.All 和搜索。
选择“在具有该名称的 NuGet 包上安装”,然后关闭“NuGet”窗口。
创建 TraceProcessor
将Program.cs更改为以下内容:
using Microsoft.Windows.EventTracing; using Microsoft.Windows.EventTracing.Processes; using System; class Program { static void Main(string[] args) { if (args.Length != 1) { Console.Error.WriteLine("Usage: <trace.etl>"); return; } using (ITraceProcessor trace = TraceProcessor.Create(args[0])) { // TODO: call trace.Use... trace.Process(); Console.WriteLine("TODO: Access data from the trace"); } } }
提供运行项目时要使用的跟踪名称。
在解决方案资源管理器中,右键单击项目并选择“属性”。 切换到“调试”选项卡,并在应用程序参数中输入跟踪(.etl 文件)的路径。
如果还没有跟踪文件,可以使用 Windows 性能记录器 创建一个。
运行该应用程序。
选择“调试”,然后选择“启动但不调试”以运行代码。
使用 TraceProcessor 访问跟踪中包含的进程命令行
将Program.cs更改为以下内容:
using Microsoft.Windows.EventTracing; using Microsoft.Windows.EventTracing.Processes; using System; class Program { static void Main(string[] args) { if (args.Length != 1) { Console.Error.WriteLine("Usage: <trace.etl>"); return; } using (ITraceProcessor trace = TraceProcessor.Create(args[0])) { IPendingResult<IProcessDataSource> pendingProcessData = trace.UseProcesses(); trace.Process(); IProcessDataSource processData = pendingProcessData.Result; foreach (IProcess process in processData.Processes) { Console.WriteLine(process.CommandLine); } } } }
再次运行应用程序。
这一次,您应该会看到在记录跟踪时,所有进程正在执行的命令行列表。
后续步骤
在本快速入门指南中,您创建了一个控制台应用程序,安装了 TraceProcessor,并使用它从 ETW 跟踪中访问了进程命令行。 现在,你有一个访问跟踪数据的应用程序。
进程信息只是存储在应用程序可以访问的 ETW 跟踪中的多种数据之一。
下一步是 更详细地查看 TraceProcessor 及其可以访问的其他数据源。