在C#中使用WMI阅读事件查看器内容时,如何获得与文化无关的类型信息

时间:2017-03-29 11:55:32

标签: c# wmi event-log

我正在使用以下代码行从EventViewer读取日志。

var searcher = new ManagementObjectSearcher(@"\\WS2012-DE01\root\cimv2",
               "SELECT * FROM Win32_NTLogEvent WHERE  Type ='Error'");

上面的代码在en-US文化中运行良好,但在其他文化中会失败,因为其他文化会将Error表示为其他单词。

例如:de-DE文化中的错误字(德语)代表 Fehler 。我将在不同的环境中使用相同的代码。我不想维护资源文件,因为问题只有一个字或者不需要翻译API,因为安全措施可以解决这个问题。有谁能请我提供解决方案。

1 个答案:

答案 0 :(得分:2)

不要按事件类型的名称查询过滤,而是按内部类型ID进行过滤:

var searcher = new ManagementObjectSearcher(@"\\WS2012-DE01\root\cimv2",
               "SELECT * FROM Win32_NTLogEvent WHERE EventType=1");

您可以在documentation of the WMI Win32_NTLogEvent class中看到EventType的可能值列表。

请注意,属性Type是一个字符串,包含本地语言的类型,而EventType是一个具有固定含义的整数,如

  • 1 =错误
  • 2 =警告
  • 3 =信息
  • 4 =安全审核成功
  • 5 =安全审核失败