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