2010-06-25 14 views
0

我的問題很簡單,但顯然沒有人遇到類似的錯誤。我正在編寫一個程序來檢查WMI類的屬性是否可寫,也就是說,如果該屬性的「Write」限定符爲真。我的代碼如下所示:WMI GetPropertyQualifierValue「找不到」

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 —拉出它們應該是有效的)。

類似地,GetQualifierValue在嘗試獲取類的限定符時也不起作用。

任何人有任何想法?

回答

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); 
     } 
    } 
} 
+0

這就是它!謝謝。 – 2010-08-12 14:21:55