2010-06-25 4 views
0

Ma question est vraiment simple, mais apparemment personne n'a rencontré une erreur similaire. J'écris un programme pour vérifier si la propriété d'une classe WMI est accessible en écriture, c'est-à-dire si le qualificateur "Write" est vrai pour cette propriété. Mon code ressemble à ceci:WMI GetPropertyQualifierValue "Non trouvé"

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 

Chaque fois qu'il appelle, cependant, il renvoie un « Pas trouvé » exception, quelle que soit la propriété ou le nom de qualification, j'utiliser (tous les son que je l'ai essayé, je l'ai tiré de MSDN — ils devraient être valides).

De même, GetQualifierValue ne fonctionne pas non plus lorsque vous essayez d'obtenir les qualificatifs de la classe.

Vous avez des idées?

Répondre

1

La bonne façon de vérifier si une propriété de classe est accessible en écriture est de vérifier l'existence du qualificatif "write". Ce qui suit est un exemple de code:

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

En utilisant le code ci-dessous, vous verrez que la propriété Description a seulement la CIMType, Description de et lire qualificatifs.

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

C'est tout! Je vous remercie. –