我在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;

}

最佳答案

我还尝试通过WMI设置一个固定的IPv6地址,但是它似乎不起作用(IPv4地址确实起作用)。
我发现做到这一点的唯一方法是从代码中启动netsh,并使用它来设置固定的(静态)IPv6地址。如果有人有更好的解决方案,我会很乐意使用它。同时:

使用.NET System.Diagnostics.Process类来启动netsh进程。

告诉您所需参数的netsh命令引用为here.

我发现我需要为发送的每个命令启动一个新的netsh进程。
对于每个netsh进程,我为该进程的OutputDataReceived事件创建了一个处理程序,该处理程序记录了netsh反馈。

关于c# - 使用C#为Windows设置ipv6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12087431/

10-11 23:08
查看更多