我正在运行以下代码,试图获取运行它的设备的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阵列属性。
干杯
排序为2。通过正确的谷歌搜索:P
我不得不将搜索者返回的对象放入一个数组中,然后通过该数组进行foreach以获得我的值:
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";
}
仍然不知道为什么我在尝试查看搜索者时会出现异常。但我的问题已经解决了。