解耦的WMI提供程序 - 从wmic而不是应用程序工作

时间:2012-07-06 15:03:58

标签: .net wmi

我在.NET 4中编写了一个解耦的WMI提供程序,它一直运行得很好。我最近为它添加了一个类,无论出于何种原因,总是会导致在我的.NET应用程序中查询它的模糊消息“不支持”时抛出ManagementException。但是我可以使用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"])
                };
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

面掌所以问题是该属性的名称是“Order”。我猜这是WQL中的保留字。我将属性的名称更改为“BootOrder”,它的工作正常。