0

我最近发现 WMi 是本地化的。这意味着由于数字中的逗号/点,我的 WQL 查询和返回的结果有时不正确。由于有很多用户使用德语/法语/日语窗口,这一定是经常遇到的问题。

如何在不需要 Windows 的每种语言突变的特殊情况下与 WMI 通信?

更新:根据 RRUZ 的回答和我在网上找到的几篇文章,本地化信息似乎存储在包含本地化标识符的子命名空间中。有两件事我还不清楚。

  1. 似乎法语 Windows 上的基本类已经返回带有十进制逗号而不是点的数字。这是否意味着使用的默认语言环境始终是系统之一?
  2. 上一个问题中描述的行为让我想知道从一个系统转换到另一个系统的数字在哪里?它会发生在框架本身吗?
  3. 是否存在所有 Windows 实例上的通用语言环境?从我所读到的,似乎我不能期望请求任何语言环境并获得本地化结果。
4

1 回答 1

1

WMI 的本地化在 MSDN 文档中进行了说明 Localizing WMI Class Information

WMI 实现了一种技术,该技术允许将同一类的多个本地化版本存储在存储库中。

类定义分为以下版本:

* A language-neutral version that contains only a basic class definition.
* A language-specific version that contains localized information, such as property descriptions that are specific to a locale.

特定于语言的类定义存储在包含与语言无关的基本类定义的命名空间下的子命名空间中。

当您请求特定语言环境的本地化类定义时,WMI 将基本类定义和本地化类信息结合起来形成一个完整的本地化类。您可以通过在连接到 WMI 时指定区域设置并设置一个指示您需要本地化信息的标志来获得 WMI 类的本地化版本。然后,WMI 将来自类定义的中性语言版本和特定语言版本的信息合并以形成本地化类。

包含本地化信息的 WMI 类标有修正限定符,称为修正类;如果一个类具有此限定符,则它支持本地化信息。您可以通过检查另一个名为 Locale 的限定符来确定该类已针对哪个语言环境进行本地化。语言环境限定符包含标识语言环境的本地化标识符 (Windows LCID)。例如,美式英语的语言环境是 0x409。如果修改后的类中的限定符包含本地化信息,则它包含修改后的限定符风味。

因此,根据您用于访问 WMI 的语言和框架,您可以将ConnectionOptions.Locale属性设置为访问英文版的 WMI 存储库。

ConnectionOptions options = new ConnectionOptions();
options.Locale = "MS_409"; 
ManagementScope scope = new ManagementScope("\\\\FullComputerName\\root\\cimv2", options);
scope.Connect();
于 2015-03-12T15:11:34.360 回答