2

我想让我的应用程序使警告和错误对 Windows 事件查看器中的全局“应用程序”日志可见。我已成功遵循此处帮助我启动并运行 ETW 的说明,但我仅在通过跟踪程序显式启用日志记录时才看到事件,即使如此,它们也仅显示在生成的 .etl 文件中,而不显示在全局文件中日志。

如何以编程方式注册事件并将其写入全局应用程序日志,以便当用户运行事件查看器时,他们会看到来自我的应用程序的事件?甚至可能吗?简而言之,我想得到类似下面截图的结果,只需要更少的photoshopping:

在此处输入图像描述

4

1 回答 1

2

ETW 对于您的目的似乎相当复杂,以下是写入事件日志的过程:

a) 一次性(您通常会在安装应用程序时这样做)将您的应用程序注册为事件提供者;只有EventMessageFile条目是真正需要的:
- key = HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MyCoolGame
- 字符串名称 (REG_EXPAND_SZ) = EventMessageFile
- 字符串值 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\ EventLogMessages.dll

b) 程序启动时:注册事件源并接收句柄:

hEventLog = RegisterEventSource(NULL, lpszAppNameName);

c) 使用ReportEvent 函数将条目写入事件日志:

TCHAR szLogBuffer[] = _T("Started new multiplayer server.");
const TCHAR *lpszEventStrings[2] = {szLogBuffer, NULL};
ReportEvent(hEventLog, EVENTLOG_INFORMATION_TYPE, 0, 1, NULL, 1, 0, lpszEventStrings, NULL)

d) 在程序关闭时:

DeregisterEventSource(hEventLog);
于 2013-10-27T08:45:20.337 回答