我在一些应用程序中的几个地方使用WMI,但有时候应用程序会陷入WMI get方法。当发生这种情况时,似乎除了机器重启之外似乎无法恢复它。在任务管理器中停止调试/结束进程,然后重新启动应用程序会导致它在同一点挂起。一旦WMI开始挂起,没有任何应用程序能够获得任何结果。等待WMI恢复需要无限期的时间,并且在机器重启之前似乎永远不会有任何后续改进。
我的几个代码摘录:
GetInstances()是此代码挂起的地方。
public static ChassisTypes GetCurrentChassisType()
{
ManagementClass systemEnclosures = new ManagementClass("Win32_SystemEnclosure");
ManagementObjectCollection results = systemEnclosures.GetInstances();
foreach (ManagementObject obj in results)
{
foreach (int i in (UInt16[])(obj["ChassisTypes"]))
{
if (i > 0 && i < 25)
{
return (ChassisTypes)i;
}
}
}
return ChassisTypes.Unknown;
}
Get()是此代码挂起的地方。
public static string GetOSInfo()
{
System.Management.ManagementObjectSearcher objMOS = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
try
{
foreach (ManagementObject objManagement in objMOS.Get())
{
// Do stuff to build OS version string
}
}
catch (Exception)
{
}
return OSName;
}
如何停止挂断和冻结其余WMI的呼叫?
答案 0 :(得分:0)
您必须确保使用正确的WMI
说明。尝试使用断点调试您的应用,找出可能出错的地方。
我的博客上的WMI usage sample (Task Manager)(可用于下载的来源)可以帮助您