我在Windows中设置Ipv6有问题 以下代码可以设置IPv4地址,但我不能尝试设置IPv6 请帮帮我。
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
try
{
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
// Make sure this is a IP enabled device. Not something like memory card or VM Ware
if ((bool)mo["IPEnabled"])
{
if (mo["Caption"].Equals(nicName))
{
ManagementBaseObject newIP = mo.GetMethodParameters("EnableStatic");
ManagementBaseObject newGate = mo.GetMethodParameters("SetGateways");
ManagementBaseObject newDNS = mo.GetMethodParameters("SetDNSServerSearchOrder");
newGate["DefaultIPGateway"] = new string[] { Gateway };
newGate["GatewayCostMetric"] = new int[] { 1 };
newIP["IPAddress"] = IpAddresses.Split(',');
newIP["SubnetMask"] = new string[] { SubnetMask };
newDNS["DNSServerSearchOrder"] = DnsSearchOrder.Split(',');
ManagementBaseObject setIP = mo.InvokeMethod("EnableStatic", newIP, null);
ManagementBaseObject setGateways = mo.InvokeMethod("SetGateways", newGate, null);
ManagementBaseObject setDNS = mo.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
break;
}
}
}
}
catch (Exception ex)
{
string str = ex.Message;
}
答案 0 :(得分:1)
我还尝试通过WMI设置固定的IPv6地址,但它似乎不起作用(IPv4地址确实有效)。
我发现这样做的唯一方法是从代码中启动netsh,并使用它来设置固定(静态)IPv6地址。如果有人有更优雅的解决方案,我会很乐意使用它。与此同时:
使用.NET System.Diagnostics.Process类启动netsh进程。
netsh命令参考,它告诉您所需的参数是here.
我发现我需要为我发送的每个命令启动一个新的netsh进程 对于每个netsh进程,我为进程的OutputDataReceived事件创建了一个处理程序,它记录了netsh反馈。