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