Чтение журнала событий Windows с помощью C # (Source! = ProviderName! = SourceName) - PullRequest
3 голосов
/ 11 января 2012

Я использую C # для чтения журнала событий Windows и хочу выбрать / отфильтровать записи из него.Проблема заключается в том, что информация, отображаемая в средстве просмотра событий, не всегда совпадает с данными, полученными с помощью c #.

, например:

EventViewer "Source": "User Profile Service"

Использование класса EventLogEntry: свойство "Source": "Служба профилей пользователей Microsoft-Windows"

Использование класса EventLogReader: свойство "ProviderName": «Служба профилей пользователей Microsoft-Windows»

Использование WMI: «SourceName»: «Служба профилей пользователей Microsoft-Windows»

Iнужно иметь возможность прочитать точную информацию, отображаемую в EventViewer, откуда я могу получить эту информацию?


Чтение сообщения EventLog ...

При чтении сообщения EventLog с помощьюкласс EventLogEntry Я иногда получаю следующую строку:

Описание для идентификатора события "xxx" в источнике "xxx" не может быть найдено

Опять же, это не совпадаетсообщение, отображаемое в EventViewer ... Я попытался использовать метод EventLogReader.FormatDescription (), и он дает мне правильное (то же самое, что и EventViewer) сообщение, НО для некоторых записей он просто возвращает ноль, а EventLogEntry.Message содержит правильный текст.

Как правильно получить сообщение о событии, чтобы получить то же сообщение, которое отображается в EventViewer?

Ответы [ 2 ]

2 голосов
/ 12 января 2012
var eventLog = new EventLog("logName", "machine", "source");
foreach(var entry in eventLog.Entries)
{
}

Это довольно простой способ взаимодействия с журналом. Если вам нужна более глубокая фильтрация этого источника, вы можете написать запрос LINQ в записи. Как показано здесь .

Что касается ошибки, то одной из распространенных причин является отсутствие надлежащего доступа к событиям и / или реестру в соответствующем поле. Поскольку вы можете видеть данные в EventViewer, я подозреваю, что ошибка прав доступа является хорошей возможностью.

1 голос
/ 20 марта 2013

Похоже, что строка «Источник», показанная в столбце «Источник» в средстве просмотра событий, сокращена. Также кажется, что когда вы пытаетесь создать EventLog в C #, имеет значение только logtype, например. «Приложение», «Система» и т. Д. После создания EventLog он будет содержать все записи для этого типа журнала независимо от того, что вы указали в качестве источника.

Чтобы получить событие, основанное на «Источнике», вы хотите перебрать записи и отфильтровать только записи для этого «Источника». Просто имейте в виду, что фактическое имя источника не совпадает с тем, что вы видите в окне просмотра событий. Например, для источника «Winlogon» фактическое имя источника будет выглядеть так: «Microsoft-Windows-Winlogon» и т. Д.

...