2015-09-29 69 views
0

我想讀一個存檔的Windows事件日誌文件(.evtx),就像在這個例子中爲Windows事件日誌消息的模板:如何獲得

using System; 
using System.Diagnostics.Eventing.Reader; 

public static class Program { 
    static void Main(string[] args) { 
     using (var reader = new EventLogReader(@"C:\tmp\some-log.evtx", PathType.FilePath)) { 
      EventRecord record; 
      while ((record = reader.ReadEvent()) != null) { 
       // do something with record... 
      } 
     } 
    } 
} 

record對象有一個Properties列表包含替換字符串的事件:

foreach (var property in record.Properties) { 
    Console.WriteLine(property.Value); 
} 

如果我打開.evtx文件在事件日誌查看器,我可以看到一個完整描述的事件,它就像一個基本模板消息(應該來自resourc與這些值替換佔位符的值相關聯,以生成該事件的應用程序ES文件):

enter image description here

有沒有一種方法,我可以得到一定的情況下,本「消息模板」?

回答

0

我後來發現,那些「消息模板」可閱讀相關的某一供應商的事件的元數據(這基本上是事件註冊的源)。

下面是一個例子:

using System; 
using System.Diagnostics.Eventing.Reader; 
using System.Globalization; 

public static class Program { 

    static void Main(string[] args) { 
     foreach (var providerName in EventLogSession.GlobalSession.GetProviderNames()) { 
      DumpMetadata(providerName); 
     } 
    } 

    private static void DumpMetadata(string providerName) { 
     try { 
      ProviderMetadata providerMetadata = new ProviderMetadata(providerName, EventLogSession.GlobalSession, CultureInfo.InvariantCulture); 
      foreach (var eventMetadata in providerMetadata.Events) { 
       if (!string.IsNullOrEmpty(eventMetadata.Description)) { 
        Console.WriteLine("{0} ({1}): {2}", eventMetadata.Id, eventMetadata.Version, eventMetadata.Description); 
       } 
      } 
     } catch (EventLogException) { 
      Console.WriteLine("Cannot read metadata for provider {0}", providerName); 
     } 
    } 
} 
+0

通過任何來源,你知道這些元數據被保存在Windows? – Vesper