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

How do I get culture-neutral type information when reading event viewer content with WMI in C#

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

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

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

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

不查询按事件类型名称过滤,而是按内部类型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 = 安全审核失败