【问题标题】:Lenovo BIOS WMI - InvalidQueryLenovo BIOS WMI - 无效查询
【发布时间】:2015-05-13 19:52:57
【问题描述】:

我即将创建一个获取一些系统信息的工具。 只有联想 BIOS (WakeOnLAN) 请求没有做我想要的。

调试器总是停止并显示“无效请求”错误消息。

我尝试了以下...

ManagementObjectSearcher searcher = new ManagementObjectSearcher("\\\\" + textBox1.Text + "\\root\\wmi", "SELECT * FROM Lenovo_BiosSetting WHERE InstanceName='ACPI\\PNP0C14\\1_0'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("\\\\" + textBox1.Text + "\\root\\wmi:Lenovo_BiosSetting.InstanceName='ACPI\\PNP0C14\\1_0'");

代码:

//LenovoWOL
        public string GetLenovoWOL()
        {
            ManagementObjectSearcher searcher = new ManagementObjectSearcher("\\\\" + textBox1.Text + "\\root\\wmi:Lenovo_BiosSetting", "SELECT * FROM ACPI\\PNP0C14\\1_0");
            foreach (ManagementObject wmi in searcher.Get())
            {
                try
                {
                    return Environment.NewLine + wmi.GetPropertyValue("CurrentSetting").ToString();
                }
                catch { }
            }
            return "Unknown";
        }

仅当我删除 InstanceName 部分时,代码才有效。

如果你能告诉我,我做错了什么,谁能告诉我。 感谢您的帮助

阿德里安

【问题讨论】:

  • 抛出的错误是哪一行代码..?你能告诉我们吗?
  • VisualStudio 将单词“in”标记为绿色。 " foreach (ManagementObject wmi in searcher.Get()) " Adrian

标签: c# wmi bios


【解决方案1】:

我找到了解决办法。

这是我的代码。它不漂亮,但很有效。

ManagementPath path = new ManagementPath()
{
     NamespacePath = @"root\wmi",
     Server = textBox1.Text
};
     ManagementScope scope = new ManagementScope(path);
     SelectQuery Sq = new SelectQuery("Lenovo_BiosSetting");
     ManagementObjectSearcher objOSDetails = new ManagementObjectSearcher(scope, Sq);
     ManagementObjectCollection osDetailsCollection = objOSDetails.Get();
     foreach (ManagementObject MO in osDetailsCollection)
     {
         if (MO["CurrentSetting"].ToString().Contains("WakeOnLAN"))
     {
         string[] arr = new string[3];
         ListViewItem itm;
         //add items to ListView
         arr[0] = "";
         arr[1] = "WakeOnLAN";
         arr[2] = MO["CurrentSetting"].ToString();
         itm = new ListViewItem(arr);
         listView200.Items.Add(itm);
    }
}

阿德里安

【讨论】:

  • 我会更改 .Contains 以使用 .ToUpper() 函数,以防名称属于不同类型。
  • 您好 MethodMan,感谢您的提示。有时间我会改代码的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多