我的问题很简单,但显然没有人遇到过类似的错误。我正在编写一个程序来检查WMI类的属性是否可写,也就是说,如果该属性的“Write”限定符为true。我的代码如下所示:
ManagementObjectSearcher mos = new ManagementObjectSearcher("root\\\CIMV2", "SELECT * FROM " + "Win32_Processor"); <br />
ManagementObjectCollection moc= mos.Get(); <br />
ManagementClass manClass = new ManagementClass("Win32_Processor"); <br />
bool isWriteable = false;
isWriteable (bool)manClass.GetPropertyQualifierValue("Description", "Write"); <br />
// I've also tried to call it on a ManagementObject instance of ManagementObjectCollection, doesn't work either way
然而,每次调用它时,它都会返回一个“未找到”异常,无论我使用哪个属性或限定符名称(我尝试过的所有属性都是从MSDN中提取的 - 它们应该是有效的)。
同样,{I}在尝试获取类的限定符时也不起作用。
有人有什么想法吗?
答案 0 :(得分:1)
检查Class属性是否可写的正确方法是检查是否存在“write”限定符。以下是一些示例代码:
ManagementClass processClass =
new ManagementClass("Win32_Process");
bool isWriteable = false;
foreach (PropertyData property in processClass.Properties)
{
if (property.Name.Equals("Description"))
{
foreach (QualifierData q in property.Qualifiers)
{
if (q.Name.Equals("write"))
{
isWriteable = true;
break;
}
}
}
}
使用下面的代码,您会看到Description属性仅包含 CIMTYPE ,描述和读取限定符。
ManagementClass processClass =
new ManagementClass("Win32_Process");
processClass.Options.UseAmendedQualifiers = true;
foreach (PropertyData property in processClass.Properties)
{
if (property.Name.Equals("Description"))
{
foreach (QualifierData q in property.Qualifiers)
{
Console.WriteLine(q.Name);
}
}
}