2016-02-15 2 views
0

Мне было интересно, есть ли способ добраться до журналов в разделе «Приложения и журналы обслуживания» в утилите просмотра событий в Windows. Дело в том, что я могу читать записи в Windows Logs с помощью кода ниже. Я прочитал всю запись и получаю элементы с необходимым идентификатором, получая 20 лучших результатов. Но я ничего не мог найти при доступе к разделу «Журналы приложений и сервисов». Должен ли я изменить LogType в конструкторе EventLog? Или существует другой метод или класс для доступа к журналам приложений и сервисов? Попытка "Application" как переменная logType не работает.Доступ к журналам приложений и сервисов с C#

 string str = ""; 
     EventLog ev = new EventLog(logType, System.Environment.MachineName); 
     int LastLogToShow = ev.Entries.Count; 
     if (LastLogToShow <= 0) 
      Console.WriteLine("No Event Logs in the Log :" + logType); 

     int i; 
     int k = 0; 

     for (i = ev.Entries.Count - 1; i >= 0; i--) 
     { 
      EventLogEntry CurrentEntry = ev.Entries[i]; 
      if (CurrentEntry.EventID == id) 
      { 
       if (id == 1) 
       { 
        str += "Son Açılma \n"; 
        str += "Olay Zamanı: " + CurrentEntry.TimeGenerated.ToLongDateString() + " " + CurrentEntry.TimeGenerated.ToShortTimeString() + "\n"; 
       } 

       else if (id == 42) 
       { 
        str += "Son Kapatılma \n"; 
        str += "Olay Zamanı: " + CurrentEntry.TimeGenerated.ToLongDateString() + " " + CurrentEntry.TimeGenerated.ToShortTimeString() + "\n"; 
       } 
       else 
       { 
        str += "Event type: " + CurrentEntry.EntryType.ToString() + "\n"; 
        str += "Event Message: " + CurrentEntry.Message + CurrentEntry + "\n"; 
        str += "Event : " + CurrentEntry.UserName + "\n" + "\n"; 
        str += "Olay Zamanı: " + CurrentEntry.TimeGenerated.ToLongDateString() + " " + CurrentEntry.TimeGenerated.ToShortTimeString() + "\n"; 
       } 
       k++; 
      } 
      if (k > 20) 
       break; 
     } 
     ev.Close(); 
     return str; 

То, что я ищу под

Применение и обслуживание Журналы/

Microsoft/

Windows/

TerminalServices-RemoteConnectionManager/

Operational/

Код события 1149

ответ

1

Я не уверен, что вы можете получить к ним доступ с помощью EventLog класса, или, по крайней мере, я не мог понять, каким образом. Я сделал это, используя класс EventLogQuery.

Я привел пример, ниже которого я адаптировано из этого поста (C#: How to Query for an event log details with a given event id?), и должны работать на то, что вам нужно:

using System.Diagnostics.Eventing.Reader; 

string logType = "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational"; 
string query = "*[System/EventID=1149]"; 

var elQuery = new EventLogQuery(logType, PathType.LogName, query); 
var elReader = new EventLogReader(elQuery); 

for (EventRecord eventInstance = elReader.ReadEvent(); eventInstance != null; eventInstance = elReader.ReadEvent()) 
{ 
     // .. do stuff here 
} 
+0

Спасибо за ответ, но проблема в том, я получаю InvalidOperationException когда код достигнет конца блока for. Я думаю, что, поскольку 'readEvent()' читает следующее значение, оно получает нуль или что-то еще? О, и, кстати, массив заполняется 42 случаями события, тогда я получаю ошибку – EvsizTospaa

+0

Это отлично работает для меня. Нет цикла for for для этого и ломается, когда он встречает нулевую запись. Какова фактическая ошибка? Вы пытаетесь изменить события в цикле? – w69rdy

+0

Он выдает эту ошибку, когда вы вызываете метод ReadEvent(), и нет больше событий для чтения, вы это делаете? – w69rdy

Смежные вопросы