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!!
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