2015-09-29 43 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