我最近发现WMi是本地化的。这意味着我的WQL查询和返回的结果有时会因为数字中的逗号/点而不正确。由于有许多用户使用德语/法语/日语窗口,这必然是经常遇到的问题。
如何在不需要针对Windows的每种语言变异的特殊情况下与WMI进行通信?
更新:根据RRUZ的回答以及我在网上发现的一些文章,看来本地化信息存储在包含本地化标识符的子命名空间中。有两件事我还不清楚。
答案 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();