2
我在.NET 4中編寫了一個解耦的WMI提供程序,該提供程序一直工作得很好。我最近添加了一個類,無論出於何種原因,總會在我的.NET應用程序中查詢它時引發一個ManagementException異常的錯誤消息「不支持」。不過,我可以使用wmic查詢這個類。解耦的WMI提供程序 - 從wmic開始但不是應用程序
該類遵循與提供程序中的其他類相似的模式,它們在本地從應用程序查詢時工作得很好。我無法解釋爲什麼我可以從wmic中查詢它,但不是我的應用程序。請幫忙!
編輯:我試着從一個新的控制檯應用程序查詢這個WMI類,並得到了相同的例外。 WMI跟蹤不會提供有價值的信息,只是啓動WMI查詢,然後在兩秒鐘後停止操作。
下面是類代碼:
[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"])
};
}
}
}
}
因此,在嘗試一些奇怪的事情並讓同事提供建議後,有人建議嘗試用簡單的「select *」來查詢該類,而不是單獨列出每個屬性。這實際上有點奇怪。任何想法爲什麼選擇*將工作,但屬性列表不會? – kaftw 2012-07-11 17:06:30
所以基本上我是通過wmic來查詢,而不是通過我的應用程序,因此有所不同。當我做一個實際的查詢時,我得到了類似的結果,其中抓取屬性列表失敗,但得到*的作品。我在每個屬性上單獨嘗試了它,出於某種原因,Order每次都失敗。有誰知道爲什麼_that_會是? – kaftw 2012-07-11 17:20:05