2

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

1 回答 1

0

Face palm所以问题是属性的名称是“Order”。我猜这是 WQL 中的保留字。我将属性的名称更改为“BootOrder”,它工作得很好。

于 2012-07-13T11:45:34.570 回答