Почему этот запрос WMI висит во второй раз, когда он вызывается? - PullRequest
0 голосов
/ 14 июля 2009

Следующий запрос WMI вызывает исключение на serverProtocolsManagement.Get(), когда sqlHost является недопустимым именем сервера (как и ожидалось. Однако, если я попытаюсь снова вызвать этот код с тем же недопустимым параметром, конструктор ManagementScope зависнет на неопределенное время (никогда не возвращает или выдает ошибку, просто зависает.) Есть ли разумное объяснение этому?

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:

Я пытался возиться с различными вариантами таймаута (передавая объект ConnectionOptions в конструктор ManagementScope), но безрезультатно.

Редактировать № 2:

Я не знаю, почему я не подумал об этом (хотя это все еще не должно быть проблемой): я вызывал этот код из Immediate Window в VS во время отладки. Должно быть, возникла какая-то проблема с многопоточностью, потому что, как только я связал этот код с кнопкой Windows Forms, все заработало просто отлично. Спасибо за помощь !!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2009

Видимо, выполнение запросов WMI из окна Immediate во время отладки - нет-нет. Выполнение запроса в результате нажатия кнопки вместо этого устранило проблему.

0 голосов
/ 14 июля 2009

Есть ли у вас такая же проблема, когда вы используете конструктор ManagementClass (с областью видимости строки вместо объекта ManagementScope)?

(для этого пропускается весь шаг ManagementScope)

...