2009-07-14 15 views
0

Die folgende WMI-Abfrage löst eine Ausnahme bei serverProtocolsManagement.Get() aus, wenn sqlHost ein ungültiger Servername ist (wie erwartet. Wenn ich jedoch versuche, diesen Code mit demselben ungültigen Parameter erneut aufzurufen, bleibt der ManagementScope-Konstruktor unbegrenzt hängen (gibt nie zurück oder gibt einen Fehler aus) , hängt nur) gibt es eine vernünftige Erklärung für dieseWarum hängt diese WMI-Abfrage beim zweiten Aufruf ab?

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()); 
    } 

Edit:.?

ich habe versucht, um mit verschiedenen Timeout-Optionen durcheinander (durch ein ConnectionOptions Objekt an den Konstruktor ManagementScope) vorbei, aber zu kein Erfolg.

Edit # 2:

Ich weiß nicht, warum ich nicht daran denken war (obwohl es noch kein Problem sein sollte): Ich rufe den Code aus dem Direkt-Fenster in VS während des Debuggens. Es muss ein Threading-Problem gegeben haben, denn nachdem ich diesen Code mit einer Windows Forms-Schaltfläche verknüpft hatte, funktionierte alles einwandfrei. Danke für die Hilfe!!

Antwort

0

Anscheinend WMI-Abfragen aus dem Direkt-Fenster ausgeführt wird, während das Debuggen eines No-No ist. Durch Ausführen der Abfrage als Ergebnis eines Tastendrucks wurde das Problem behoben.

0

Haben Sie das gleiche Problem, wenn Sie den ManagementClass-Konstruktor verwenden (mit dem String-Bereich anstelle des ManagementScope-Objekts)?

(dafür den gesamten Managementscope Schritt übersprungen)

+0

Ich habe Ihren Vorschlag versucht, und ja, ich habe das gleiche Problem. Ich habe auch das gleiche Problem mit dem ManagementObjectSearcher-Objekt anstelle des ManagementClass-Objekts. Sehr komisch... – Pwninstein