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