WMI GetPropertyQualifierValue "Не найдено" - PullRequest
0 голосов
/ 25 июня 2010

Мой вопрос очень прост, но, похоже, никто не сталкивался с подобной ошибкой. Я пишу программу, чтобы проверить, является ли свойство класса WMI доступным для записи, то есть, если для этого свойства установлен квалификатор «Write». Мой код выглядит так:

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 Ответ

1 голос
/ 25 июня 2010

Правильный способ проверить, является ли свойство класса доступным для записи, - это проверить наличие квалификатора «запись». Ниже приведен пример кода:

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 , Description и read .

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