У меня есть приложение, которое должно позволять пользователю указывать режим распределения адресов (статический / dhcp) для одного из двух сетевых адаптеров.Одна карта используется для связи с SOM и всегда будет иметь статический IP-адрес 192.168.0.2, а другая - для внешнего подключения (целевой NIC).Мой код компилируется и выполняется без исключения.Я использую условное выражение для поиска карты для внешнего соединения, основываясь на том факте, что мое внутреннее соединение всегда живет по адресу 192.168.0.2 (учтено в примере).Он работает, но настройки сети в Windows не отражают изменения.Может кто-нибудь сказать мне, почему мой код на самом деле ничего не делает?
//Sets static IP
public static void SetStaticIP(string ip, string newIP, string subnet = "255.255.255.0")
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if ((bool)objMO["IPEnabled"])
{
try
{
object x = objMO["IPAddress"];
string[] str = (string[])x;
if (str[0] == ip)
{
ManagementBaseObject objNewIP = null;
ManagementBaseObject objSetIP = null;
objNewIP = objMO.GetMethodParameters("EnableStatic");
objNewIP["IPAddress"] = new string[] {newIP};
objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
}
}
catch (Exception ex)
{
Console.WriteLine("Unable to Set IP : " + ex.Message);
}
}
}
}
//sets allocation to DHCP
public static bool setDHCP(string oldIP)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (!(bool)objMO["IPEnabled"])
{
object x = objMO["IPAddress"];
string[] str = (string[])x;
if (str[0] == oldIP)
{
try
{
ManagementBaseObject objNewDNS = null;
ManagementBaseObject objSetDNS = objMO.GetMethodParameters("EnableDHCP");
objNewDNS = objMO.InvokeMethod("EnableDHCP", null, null);
return true;
}
catch (Exception) { return false; }
}
}
}
return false;
}