2009-10-26 3 views
1

При использовании средства просмотра событий в Windows 7 существует отдельный «XML-вид» события, доступ к которому возможен из диалогового окна «Свойства события». Этот XML относится к пространству имен http://schemas.microsoft.com/win/2004/08/events/event.Сериализация экземпляра .NET EventLogEntry для XML

Когда я подписываюсь на события Windows с использованием классов .NET Framework в пространстве имен System.Diagnostics и извлекает объекты событий в форме экземпляров EventLogEntry, есть ли способ сериализации этих экземпляров в формате XML, упомянутом выше? Кажется, я не могу найти.

Большое спасибо за ваш ответ.

Update: благодаря jmservera я узнал, есть разные, и лучше API в System.Diagnostics.Eventing.Reader имен, однако этот API не поддерживает развертывание в Windows Server 2003/XP.

Обновление 2: Я принял ответ jmservera, потому что это привело меня к решению. Если вы нацеливаете Vista/Windows Server 2008, следуйте рекомендациям jmservera и используйте API в более новом пространстве имен. Если, однако, вам необходимо поддерживать предыдущие ОС, вам придется использовать старый API и самостоятельно сериализовать EventLogEntry в XML.

ответ

3

Вы должны использовать пространство имен System.Diagnostics.Eventing.Reader так:

static void Main(string[] args) 
{ 
EventLogQuery query = new EventLogQuery("System", PathType.LogName); 
EventLogWatcher watcher = new EventLogWatcher(query); 
watcher.EventRecordWritten += new EventHandler<EventRecordWrittenEventArgs>(watcher_EventRecordWritten); 
watcher.Enabled = true; 
Console.ReadLine(); 
} 

static void watcher_EventRecordWritten(object sender, EventRecordWrittenEventArgs e) 
{ 
Console.WriteLine(e.EventRecord.ToXml()); 
} 
+0

спасибо jmservera, высоко ценится. Я изучил это и, на удивление, этот API, похоже, не поддерживает развертывание на XP и/или Windows Server 2003 platfrom (только Vista и Windows Server 2008). Наверное, я должен был упомянуть об этом в моем вопросе, но я не ожидал никаких ограничений в отношении этого. –

+1

Да, это новое для Vista, потому что они изменили способ хранения событий, теперь в xml-файлы. Если вам нужен один и тот же xml для всех систем, вы можете создать класс, используя xsd.exe, заполнить его и затем сериализовать. – jmservera

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