【发布时间】:2015-09-14 20:08:20
【问题描述】:
我想保存我的网络适配器配置,然后在另一台计算机上恢复它。我使用 WMI 获取网络配置并将其保存到 .txt 文件中:
using (TextWriter tw = new StreamWriter(@"D:\\NetworkConfiguration.txt"))
{
if (tw != null)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (!(bool)objMO["ipEnabled"])
continue;
string[] ipaddresses = (string[])objMO["IPAddress"];
string[] subnets = (string[])objMO["IPSubnet"];
string[] gateways = (string[])objMO["DefaultIPGateway"];
tw.WriteLine("IpAdresses");
foreach (string sIP in ipaddresses)
tw.WriteLine(sIP);
tw.WriteLine("IpSubnets");
foreach (string sNet in subnets)
tw.WriteLine(sNet);
tw.WriteLine("Gateways");
foreach (string sGate in gateways)
tw.WriteLine(sGate);
// close the stream
tw.Close();
}
}
}
然后,当我想在另一台计算机上设置 tcp/ip 设置时,我会读取文件的信息:
using (TextReader tr = new StreamReader(@"D:\\NetworkConfiguration.txt"))
{
List<string> ipAddrr = new List<string>();
List<string> ipSubnet = new List<string>();
List<string> Gateway = new List<string>();
string line = tr.ReadLine();
while (line != null)
{
if (line.Equals("IpAdresses"))
{
ipAddrr.Add(tr.ReadLine());
ipAddrr.Add(tr.ReadLine());
}
if (line.Equals("IpSubnets"))
{
ipSubnet.Add(tr.ReadLine());
ipSubnet.Add(tr.ReadLine());
}
if (line.Equals("Gateways"))
{
Gateway.Add(tr.ReadLine());
}
line = tr.ReadLine();
}
setIP(ipAddrr.ToArray(), ipSubnet.ToArray(), Gateway.ToArray());
}
并设置新设置:
public void setIP(string[] IPAddress, string[] SubnetMask, string[] Gateway)
{
ManagementClass objMC = new ManagementClass(
"Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if (!(bool)objMO["IPEnabled"])
continue;
try
{
ManagementBaseObject objNewIP = null;
ManagementBaseObject objSetIP = null;
ManagementBaseObject objNewGate = null;
objNewIP = objMO.GetMethodParameters("EnableStatic");
objNewGate = objMO.GetMethodParameters("SetGateways");
//Set DefaultGateway
objNewGate["DefaultIPGateway"] = Gateway ;
objNewGate["GatewayCostMetric"] = new int[] { 1 };
//Set IPAddress and Subnet Mask
objNewIP["IPAddress"] = IPAddress;
objNewIP["SubnetMask"] = SubnetMask;
objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);
objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);
MessageBox.Show(
"Updated IPAddress, SubnetMask and Default Gateway!");
}
catch (Exception ex)
{
MessageBox.Show("Unable to Set IP : " + ex.Message);
}
}
}
但问题是当我检查我的 tcp/ip 配置时,它永远不会改变..... 我不明白如何让它工作....
【问题讨论】:
-
引用 IT 人群的话:“您是否尝试过将其关闭再打开?”无论如何, ipconfig /all 之前和之后的输出是什么?您是否有机会首先设置一个内部适配器(之后设置具有相同值的实际适配器将不起作用)?你真的有网络连接吗?需要更多信息..
-
@mtijn 在我的应用程序 ipconfig 向我显示网络适配器的原始设置之前,在我的应用程序更改网络设置后,ipconfig 仍然显示原始设置。我没有尝试关闭和打开它,但我在运行应用程序后重新启动了计算机。我不知道我是否先设置内部适配器...我有网络连接....
-
记录您使用此功能设置的适配器的原始 IP 并查找奇数值,这些是您的内部适配器。另外,您是否遇到任何异常(包括您正在捕获的异常)?
-
@mtijn 不,我没有遇到任何异常,代码有效,之后当我检查网络设置时,我发现它们没有改变......
-
我发现这个链接非常有用 - netsh commands