2

.NET 4で分離されたWMIプロバイダーを作成しましたが、これは正常に機能しています。最近、クラスを追加しました。何らかの理由で、クエリを実行している.NETアプリケーションで「サポートされていません」というあいまいなメッセージとともにManagementExceptionが常にスローされます。ただし、wmicを使用してクラスを正常にクエリできます。

このクラスは、ローカルでアプリケーションから照会されても問題なく機能しているプロバイダー内の他のクラスと同様のパターンに従います。wmicからクエリできるのに、アプリケーションからクエリできない理由を説明するのに迷っています。助けてください!

編集:新しいコンソールアプリからこのWMIクラスをクエリしようとしましたが、同じ例外が発生しました。WMIトレースでは、WMIクエリが開始され、2秒後に操作が停止したという貴重な情報は得られません。

クラスのコードは次のとおりです。

[ManagementEntity]
public sealed class BootOrder
{        
    [ManagementKey]
    public int Order { get; private set; }

    [ManagementProbe]
    public string DeviceName { get; private set; }

    [ManagementProbe]
    public string Status { get; private set; }

    [ManagementEnumerator]
    public static IEnumerable GetBootOrder()
    {            
        if (WmiUtility.SystemType.Contains("DELL"))
        {
            return GetDellBootOrder();
        }
        else
        {
            // TODO: add code for getting HP values
            throw new NotImplementedException();
        }
    }

    private static IEnumerable GetDellBootOrder()
    {
        foreach (ManagementObject mo in WmiUtility.ExecuteWmiQuery(@"root\DellOMCI", "select BootDeviceName, BootOrder, Status from Dell_BootDeviceSequence"))
        {
            using (mo)
            {
                yield return new BootOrder
                {
                    DeviceName = Convert.ToString(mo["BootDeviceName"]),
                    Order = Convert.ToInt32(mo["BootOrder"]),
                    Status = Convert.ToString(mo["Status"])
                };
            }
        }
    }
}
4

1 に答える 1

0

手のひらに直面する問題は、プロパティの名前が「注文」であるということでした。それはWQLの予約語だと思います。プロパティの名前を「BootOrder」に変更しましたが、問題なく動作します。

于 2012-07-13T11:45:34.570 に答える