2010-06-25 4 views
0

내 질문은 정말 간단하지만 분명히 아무도 비슷한 오류를 경험하지 못했습니다. WMI 클래스의 속성이 쓰기 가능한지, 즉 해당 속성에 대해 "쓰기"한정자가 true인지 확인하는 프로그램을 작성하고 있습니다. 내 코드는 다음과 같습니다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 

이 호출 할 때마다, 그러나,에 관계없이,에 "Not found"가 예외를 반환하는 속성 또는 한정자 이름의 난 (모두 사용 나는했습니다 시도한 하나의 MSDN —에서 유효해야합니다.

마찬가지로, GetQualifierValue도 클래스의 한정자를 가져 오려고 할 때 작동하지 않습니다.

누구든지 아이디어가 있습니까?

답변

1

Class '속성이 쓰기 가능한지 확인하는 올바른 방법은 "쓰기"한정자의 존재를 확인하는 것입니다. 다음은 몇 가지 예제 코드입니다 :

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; 
      } 
     } 
    } 
} 

아래의 코드를 사용하여 설명 속성 만 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

고맙습니다. –