Итак, я пытаюсь программно изменить 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
.