我正在尝试使用存储在Win32_OperatingSystem属性中的值来填充Windows窗体中的一些文本框。我正在使用Windows 7。
以下是我正在使用的代码
ArrayList prName = new ArrayList();
ArrayList prValue = new ArrayList();
int i = 0;
ManagementClass msClassOS = new ManagementClass("Win32_OperatingSystem");
msClassOS.Options.UseAmendedQualifiers = true;
PropertyDataCollection properties = msClassOS.Properties;
foreach (PropertyData property in properties)
{
prName.Add(property.Name);
}
foreach (PropertyData property in properties)
{
prValue.Add(new string[] { msClassOS.GetPropertyValue("Value").ToString() });
}
以下是我得到的例外情况 -
System.Management.ManagementException: Not found
at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
at System.Management.PropertyData.RefreshPropertyInfo()
at System.Management.PropertyDataCollection.get_Item(String propertyName)
at System.Management.ManagementBaseObject.GetPropertyValue(String propertyName)
at NetworkMonitoringSoftware.Form1.tabControl1_Selected(Object sender, TabControlEventArgs e) in C:\Users\OWNER\Documents\Visual Studio 2010\Projects\NetworkMonitoringSoftware\NetworkMonitoringSoftware\Form1.cs:line
你能告诉我异常是什么以及如何克服它吗?
提前致谢。
答案 0 :(得分:4)
你可以尝试下面的代码:
using System;
using System.Management;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementClass osClass = new ManagementClass("Win32_OperatingSystem");
foreach (ManagementObject queryObj in osClass.GetInstances())
{
foreach (PropertyData prop in queryObj.Properties)
{
//add these to your arraylist or dictionary
Console.WriteLine("{0}: {1}", prop.Name, prop.Value);
}
}
}
catch (ManagementException e)
{
//MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
}
}
}
答案 1 :(得分:2)
您不使用属性在foreach 循环中获取 Value 。请记住, property.Value 可以为null。 property.Value 是一个可以是String或Array的对象。这是我制作的代码的摘录,可以帮助您:
mo //ManagementObject
.Properties
.OfType<PropertyData>()
.ToList()
.ForEach(p =>
{
String str = String.Empty;
if (p.Value != null)
if (p.Value.GetType().BaseType == typeof(Array)) // Value is a array, special string creation
{
Array list = (p.Value as Array);
foreach (object o in list)
str += o.ToString() + "-";
if (list.Length > 0)
str = str.Substring(0, str.Length - 1);
}
else // value is already a string
str = p.Value.ToString();
this.ListDuet
.Add(new Duet()
{
Key = Convert.ToString(p.Name),
Value = str
});
});
Duet是我为轻松管理数据而设的课程。