【问题标题】:ManagementObjectSearcher on WMI array propertyWMI 数组属性上的 ManagementObjectSearcher
【发布时间】:2016-01-10 16:18:21
【问题描述】:

我正在运行以下代码以尝试获取运行它的设备的 ChassisType。

string wmiQuery = string.Format(
    "SELECT ChassisTypes FROM Win32_SystemEnclosure");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
foreach (ManagementObject obj in searcher.Get())

当我运行它并尝试将其转换为字符串时,它给了我一个空字符串。当我尝试检查 searcher.get() 在 Autos 中返回的内容时。它给了我一个评估超时,然后是一个异常......如果我让它运行它实际上会返回

我忽略了评估,因为当我尝试检查其他 WMI 查询时遇到相同的异常,并且我知道它们可以正常工作并返回所需的值。我也不知道从哪里开始,虽然它阻碍了故障排除。

我认为问题在于 ChassisTypes 属性是一个数组...但我不知道如何获取该值。我不能在我的“obj”管理对象上运行另一个 foreach,因为管理对象确实有一个 GetEnumerator。

关于如何 1. 对评估超时进行排序...甚至更好 2. 访问 WMI 数组属性的任何想法。

干杯

【问题讨论】:

    标签: c# arrays wmi wql


    【解决方案1】:

    排序 2. 通过正确的谷歌搜索:P

    我不得不将搜索器返回的对象放入一个数组中,然后遍历该数组以获取我的值:

        var deviceType = "";
        string wmiQuery = string.Format(
            "SELECT ChassisTypes FROM Win32_SystemEnclosure");
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
        ManagementObjectCollection qCollect = searcher.Get();
        foreach (ManagementObject obj in qCollect)
        {
            Int16[] rs = (Int16[])obj["ChassisTypes"];
            foreach (var item in rs)
            { 
                if (item == 9 ||
                    item == 10 ||
                    item == 14)
                {
                    deviceType = "Laptop";
                }
                else
                {
                    deviceType = "Non-Laptop";
                }
    

    仍然不知道为什么我在尝试查看搜索器时遇到异常。但是我的问题已经解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2011-04-11
      • 2012-04-29
      • 2019-06-28
      相关资源
      最近更新 更多