serverProtocolsManagement.Get()
の場合、sqlHost
が無効なサーバー名(予期したとおりです)で例外をスローしますが、同じ無効なパラメータでこのコードを再度呼び出すと、ManagementScope
コンストラクタが無期限にハングします、ただ)ハングこの2回目にこのWMIクエリがハングするのはなぜですか?
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());
}
編集のための合理的な説明があります:。?私は)ManagementScope
コンストラクタにConnectionOptions
オブジェクトを渡すことで(別のタイムアウトオプションをいじり試みた
は、しかし、 役立たず。
編集#2:私はVSでイミディエイトウィンドウからこのコードを呼び出していました:
(それはまだ問題になることはありませんが)、私はこの考えていなかった理由を私は知りませんデバッグ中にこのコードをWindowsフォームボタンにリンクすると、すべてうまくいったので、何らかのスレッド問題があったに違いないでしょう。助けてくれてありがとう!!
私はあなたの提案を試みました。はい、同じ問題があります。私はまた、ManagementClassオブジェクトの代わりにManagementObjectSearcherオブジェクトを使用して同じ問題を抱えています。非常に奇妙な... – Pwninstein