2012-07-06 43 views
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"]) 
       }; 
      } 
     } 
    } 
} 
+0

因此,在嘗試一些奇怪的事情並讓同事提供建議後,有人建議嘗試用簡單的「select *」來查詢該類,而不是單獨列出每個屬性。這實際上有點奇怪。任何想法爲什麼選擇*將工作,但屬性列表不會? – kaftw 2012-07-11 17:06:30

+0

所以基本上我是通過wmic來查詢,而不是通過我的應用程序,因此有所不同。當我做一個實際的查詢時,我得到了類似的結果,其中抓取屬性列表失敗,但得到*的作品。我在每個屬性上單獨嘗試了它,出於某種原因,Order每次都失敗。有誰知道爲什麼_that_會是? – kaftw 2012-07-11 17:20:05

回答

0

臉手掌所以問題是,屬性的​​名稱是「訂單」。我猜這是WQL中的一個保留字。我將該屬性的名稱更改爲「BootOrder」,它工作得很好。

相關問題