与非英语WMI沟通

时间:2015-03-11 14:27:41

标签: windows localization wmi wmi-query wbem

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

如何在不需要针对Windows的每种语言变异的特殊情况下与WMI进行通信?

更新:根据RRUZ的回答以及我在网上发现的一些文章,看来本地化信息存储在包含本地化标识符的子命名空间中。有两件事我还不清楚。

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

1 个答案:

答案 0 :(得分:1)

在MSDN文档Localizing WMI Class Information中解释了WMI的本地化。

  

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。如果修改后的限定符   class包含本地化信息,它包含修改后的内容   限定词味道。

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

ConnectionOptions options = new ConnectionOptions();
options.Locale = "MS_409"; 
ManagementScope scope = new ManagementScope("\\\\FullComputerName\\root\\cimv2", options);
scope.Connect();