2012-08-23 58 views
1

我在Windows中設置Ipv6時遇到問題。
下面的代碼可以設置IPv4地址,但我不能嘗試設置IPv6。
請幫幫我。爲C#設置ipv6 for windows#

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; 

} 

回答

1

我也試圖通過WMI設置固定的IPv6地址,但它似乎沒有工作(IPv4地址不工作)。
我發現要做到這一點的唯一方法是從代碼中啓動netsh,並使用它來設置固定(靜態)IPv6地址。如果有人有更優雅的解決方案,我會很樂意使用它。同時:

使用.NET System.Diagnostics.Process類啓動netsh進程。

netsh命令參考,它告訴你,你需要的參數,是here.

我發現,我需要開始一個新的netsh過程,我發送的每個命令。
對於每個netsh進程,我爲進程的OutputDataReceived事件創建了一個處理程序,它記錄了netsh反饋。

+0

是的,我認爲「鏈路本地IPv6」是由MAC地址分配的,我們可以增加更多但不能改變它。 –

+0

您是否嘗試過使用P/Invoke到IPHLPAPI.DLL方法SetUnicastIpAddressEntry?我沒有必要嘗試它,但它看起來很有希望滿足您的需求。 –