0

私の質問は本当に単純ですが、どうやら誰も同様のエラーを経験していません。WMI クラスのプロパティが書き込み可能かどうか、つまり、そのプロパティの「書き込み」修飾子が 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 から取得しました — それらは有効なはずです)。

同様にGetQualifierValue、クラスの修飾子を取得しようとするときも機能しません。

誰にもアイデアはありますか?

4

1 に答える 1

1

クラスのプロパティが書き込み可能かどうかを確認する適切な方法は、「書き込み」修飾子の存在を確認することです。以下はいくつかのサンプルコードです。

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プロパティにはCIMTYPEDescription、および読み取り修飾子のみが含まれていることがわかります。

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);
        }
    }
}
于 2010-06-25T18:46:25.430 に答える