Изменение IP-адреса с помощью ManagementObjects: неверный IP-адрес / проблема с блокировкой? - PullRequest
0 голосов
/ 16 октября 2018

Итак, я пытаюсь программно изменить IP-адрес в хост-системе, используя классы ManagementObjects, и пытаюсь изменить его с помощью кода , сгенерированного Microsoft *1002*, следующим образом:

public static void SetIPAddress()
        {
            try
            {
                ManagementObject classInstance =
                    new ManagementObject("root\\cimv2",
                    "Win32_NetworkAdapterConfiguration.Index='15'",
                    null);

                // Obtain in-parameters for the method
                ManagementBaseObject inParams =
                    classInstance.GetMethodParameters("EnableStatic");
                // I tried both of these, but neither seem to work
                //inParams["IPAddress"] = new string [] { "10", "13", "42", "1" };
                //inParams["SubnetMask"] = new string[] { "255", "255", "255", "0" };
                inParams["IPAddress"] = new string[] { "10.13.42.1" };
                inParams["SubnetMask"] = new string[] { "255.255.255.0" };


                // Execute the method and obtain the return values.
                ManagementBaseObject outParams =
                    classInstance.InvokeMethod("EnableStatic", inParams, null);

                // List outParams
                Console.WriteLine("Out parameters:");
                Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
            }
            catch (ManagementException err)
            {
                Console.WriteLine("An error occurred while trying to execute the WMI method: " + err.Message);
            }
        }

Я получаю два разных кода ошибки (в зависимости от настройки маски IPAddres / Subnet).

Использование форматирования:

        inParams["IPAddress"] = new string[] { "10.13.42.1" };
        inParams["SubnetMask"] = new string[] { "255.255.255.0" };

Я получаю Код ошибки 2147786788 :

Write lock not enabled. For more information, see INetCfgLock::AcquireWriteLock.

У меня есть блокировка с использованием точного метода блокировки, как указано ниже: Как гарантировать исключительный доступ при изменении свойств сетевого адаптера

Использованиевторое форматирование ("10", "13", "42", "1") Я получаю:

Код ошибки 70 :

Invalid IP Address

См. Здесь дляполный список кодов ошибок

Или есть другой способ, которым я могу программно изменить IP-адрес (мне нужно изменить его в соответствии с его перечисляемым именем, которое всегда будет одинаковым - так уж получилось, что имясоответствует индексу 15 на этой машине.)

Редактировать: Если вы хотите попробовать, theres код WMI генерировать здесь .

Редактировать 2: Я пытался это решение тоже, но я бы получил тот же 2147786788.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...