为什么这个WMI查询在第二次被调用时挂起?

时间:2009-07-14 18:07:13

标签: c# .net-2.0 wmi hang wmi-query

serverProtocolsManagement.Get()是无效的服务器名称时,以下WMI查询会在sqlHost处抛出异常(正如预期的那样。但是,如果我尝试使用相同的无效参数再次调用此代码,则{{1} 1}}构造函数无限期挂起(永远不会返回或抛出错误,只是挂起)。对此有合理的解释吗?

ManagementScope

修改

我尝试过使用不同的超时选项(通过将try { ManagementScope managementScope = new ManagementScope(@"\\" + sqlHost + @"\root\Microsoft\SqlServer\ComputerManagement"); using (ManagementClass serverProtocolsManagement = new ManagementClass(managementScope, new ManagementPath("ServerNetworkProtocol"), null)) { serverProtocolsManagement.Get(); using (ManagementObjectCollection protocols = serverProtocolsManagement.GetInstances()) { foreach (ManagementObject protocol in protocols ) { protocol.Get(); if ((string)protocol.GetPropertyValue("ProtocolName") == "Tcp" && (string)protocol.GetPropertyValue("InstanceName") == sqlInstanceName) { protocol.InvokeMethod("SetEnable", null); } } } } } catch (COMException ex) { MessageBox.Show(ex.ToString()); } 对象传递给ConnectionOptions构造函数),但无济于事。

编辑#2:

我不知道为什么我没有想到这一点(尽管它仍然不应该是一个问题):我在调试时从VS中的立即窗口调用此代码。一定存在某种线程问题,因为一旦我将此代码链接到Windows窗体按钮,一切工作都很好。谢谢你的帮助!!

2 个答案:

答案 0 :(得分:0)

使用ManagementClass构造函数(使用字符串作用域而不是ManagementScope对象)时是否存在同样的问题?

(因此跳过整个ManagementScope步骤)

答案 1 :(得分:0)

显然从立即窗口运行WMI查询,而调试是禁止的。由于按下按钮而执行查询而是解决了问题。