Читать журнал событий удаленно с .NET - PullRequest
9 голосов
/ 15 марта 2011

Я хочу прочитать журнал событий на удаленном компьютере, чтобы проверить ошибки во время тестирования. Вот соответствующий код:

public bool CheckEventLogs(DateTime start)
{
  EventLog myEventLog = new EventLog("CustomLog", "ServerName");
  bool errorFound = false;
  foreach (EventLogEntry entry in myEventLog.Entries)
  {
    if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start)
    {
       Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n");
       errorFound = true;
    }
  }
  return errorFound;
}

В настоящее время этот код вызывает исключение (Попытка выполнить несанкционированную операцию). Согласно MSDN , мне нужен EventLogPermission, но я изо всех сил пытался найти какие-либо примеры использования этого разрешения. У кого-нибудь есть пример как это сделать?

Редактировать: Ответ на комментарии

Спасибо всем за комментарии - вот дополнительная запрошенная информация:

Исключение выдается из оператора foreach. В частности, при пошаговом выполнении кода он добавляется в шаг после того, как выделен in. Кажется, мне удалось создать объект журнала событий, но я не могу получить доступ к записям в журнале событий.

Моя учетная запись не имеет разрешения на чтение журнала событий в целевой системе, но у меня есть учетные данные для учетной записи, которая имеет. При подключении вручную через средство просмотра событий есть возможность подключиться как другой пользователь. После этого вручную мой код запустился без проблем. Однако я не могу полагаться на то, чтобы делать это вручную при каждом запуске этой программы. Что мне нужно, это способ подключиться как другой пользователь программным путем. Я думал, что EventLogPermission будет способом сделать это, но, возможно, есть другой способ. Если кто-нибудь знает, как подключиться к удаленному журналу от имени другого пользователя в C #, это именно то, что я искал.

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

WMI невероятно полезен для этого, фрагмент вроде

SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent

Позволит вам запрашивать журналы. Эта утилита от MS позволит вам изучить WMI и даже создаст код .net для вызова запросов.

Еще одним преимуществом является то, что он собирает все события и переносит их локально в приложение, где вы можете анализировать их на досуге. Повторение событий в соответствии с тем, что вы делаете сейчас, склонно к сбою, если соединение разрывается во время обработки (кстати, это тот же метод, который обычно используется с доступом к базе данных).

4 голосов
/ 16 марта 2011

Спасибо всем, кто предоставил комментарии по этому вопросу. Когда я понял, что разрешения могут быть не частью .NET, а частью Windows и самого средства просмотра событий, у меня появилось новое направление для моих собственных расследований.

Похоже, что команда net use - это все, что было нужно для установления соединения между моим локальным компьютером и удаленным компьютером. При вызове «net use» перед использованием кода, который я разместил в вопросе, все работало прекрасно. Достаточно просто вызвать это из кода перед чтением из журнала событий.

Еще раз спасибо за вашу помощь!

...