【问题标题】:Communicating with non-English WMI与非英语 WMI 通信
【发布时间】:2015-03-11 14:27:40
【问题描述】:

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

如何在不针对 Windows 的每种语言突变都设置特殊情况的情况下与 WMI 进行通信?

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

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

【问题讨论】:

    标签: windows localization wmi wmi-query wbem


    【解决方案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 类标有 修正限定词,称为修正类;一个类支持 本地化信息(如果它具有此限定符)。你可以确定 通过检查另一个语言,该类已本地化为哪个语言环境 限定符称为区域设置。语言环境限定符包含本地化 标识区域设置的标识符 (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();
    

    【讨论】:

    • 感谢您的回答。但是,由于我不打算使用 .NET,所以有几件事对我来说不是很清楚。我更新了这个问题,请你看看它,看看你是否可以更清楚地了解它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2012-02-22
    相关资源
    最近更新 更多