Я бы хотел, чтобы мое приложение отображало предупреждения и ошибки в глобальном журнале «Приложение» в средстве просмотра событий Windows. Я успешно следовал инструкциям Вот это помогло мне запустить и запустить ETW, но я вижу события, только когда я явно включаю ведение журнала через программу трассировки, и даже тогда они отображаются только в сгенерированном файле .etl, а не в глобальном журнале.
Как программно зарегистрировать и записать события в глобальный журнал приложений, чтобы при запуске приложения просмотра событий пользователи могли видеть события из моего приложения? Это вообще возможно? Короче говоря, я хочу закончить чем-то вроде скриншота ниже, просто с меньшим количеством необходимых фотоснимков:
ETW кажется довольно сложным для вашей цели, вот процедура записи в журнал событий:
а) Один раз (вы обычно делаете это при установке приложения) Зарегистрируйте ваше приложение в качестве поставщика событий; только 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
б) при запуске программы: Зарегистрировать источник события и получить ручку:
hEventLog = RegisterEventSource(NULL, lpszAppNameName);
в) Используйте Функция 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)
г) при закрытии программы:
DeregisterEventSource(hEventLog);
Других решений пока нет …