WMI有时会在本地计算机上无限期使用

时间:2013-11-25 14:30:00

标签: c# wmi visual-studio-2013

我在一些应用程序中的几个地方使用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的呼叫?

1 个答案:

答案 0 :(得分:0)

您必须确保使用正确的WMI说明。尝试使用断点调试您的应用,找出可能出错的地方。

  

我的博客上的WMI usage sample (Task Manager)(可用于下载的来源)可以帮助您