2009-07-14 10 views
0

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フォームボタンにリンクすると、すべてうまくいったので、何らかのスレッド問題があったに違いないでしょう。助けてくれてありがとう!!

答えて

0

デバッグ無し-NOではないながら明らかイミディエイトウィンドウからWMIクエリを実行します。ボタンを押した結果としてクエリを実行する代わりに、問題が解決されました。

0

ManagementClassコンストラクター(ManagementScopeオブジェクトの代わりに文字列スコープを使用)を使用すると同じ問題がありますか?

(その全体ManagementScopeステップをスキップ)

+0

私はあなたの提案を試みました。はい、同じ問題があります。私はまた、ManagementClassオブジェクトの代わりにManagementObjectSearcherオブジェクトを使用して同じ問題を抱えています。非常に奇妙な... – Pwninstein

関連する問題