2009-07-14 11 views
0

La requête WMI suivante renvoie une exception à serverProtocolsManagement.Get() lorsque sqlHost est un nom de serveur non valide (comme prévu.) Toutefois, si j'essaie d'invoquer à nouveau ce code avec le même paramètre non valide, le constructeur ManagementScope se bloque indéfiniment (ne renvoie jamais ou renvoie une erreur , juste se bloque) y at-il une explication raisonnable pour cePourquoi cette requête WMI est-elle suspendue la deuxième fois qu'elle est appelée?

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:.?

J'ai essayé de déconner avec différentes options de délai d'attente (en passant un objet ConnectionOptions au constructeur ManagementScope), mais à sans résultat

Edit # 2:

Je ne sais pas pourquoi je ne pensais pas que cela (même si elle ne devrait pas encore être un problème): J'appelle ce code dans la fenêtre immédiate dans VS pendant le débogage. Il doit y avoir eu une sorte de problème de threading, car une fois que j'ai lié ce code à un bouton Windows Forms, tout a bien fonctionné. Merci pour l'aide!!

Répondre

0

Apparemment, l'exécution de requêtes WMI à partir de la fenêtre Exécution pendant le débogage est un non-non. L'exécution de la requête à la suite d'un appui sur un bouton a permis de résoudre le problème.

0

Avez-vous le même problème lorsque vous utilisez le constructeur ManagementClass (avec l'étendue de la chaîne au lieu de l'objet ManagementScope)?

(à cet effet sauter toute étape de ManagementScope)

+0

J'ai essayé votre suggestion, et oui, j'ai le même problème. J'ai également le même problème en utilisant l'objet ManagementObjectSearcher au lieu de l'objet ManagementClass. Très étrange... – Pwninstein