我在.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"])
};
}
}
}
}
答案 0 :(得分:0)
面掌所以问题是该属性的名称是“Order”。我猜这是WQL中的保留字。我将属性的名称更改为“BootOrder”,它的工作正常。