这篇文章整理了网上的资料,使用 C#通过 WMI 修改 IP、DNS 等设置,希望能帮助到大家。
在项目引用中添加 System.Management,然后在代码开头加上
using System.Management;
主程序段如下:
/// /// 设置所有适配器的属性 /// 如设置失败不会产生错误,请在设置后获取其当前值以检查是否成功 /// ///IP 地址 ///子网掩码 ///网关地址 ///DNS 服务器地址,如 [0] 为"back"即恢复为自动获取 public static void SetNetwork(string[] ip, string[] submask, string[] getway, string[] dns) { ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = wmi.GetInstances(); ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; foreach (ManagementObject mo in moc) { //如果没有启用 IP 设置的网络设备则跳过 if (!(bool)mo["IPEnabled"]) continue; //设置 IP 地址和子网掩码 if (ip != null && submask != null) { inPar = mo.GetMethodParameters("EnableStatic"); inPar["IPAddress"] = ip; inPar["SubnetMask"] = submask; outPar = mo.InvokeMethod("EnableStatic", inPar, null); } //设置网关地址 if (getway != null) { inPar = mo.GetMethodParameters("SetGateways"); inPar["DefaultIPGateway"] = getway; outPar = mo.InvokeMethod("SetGateways", inPar, null); } //设置 DNS 地址 if (dns != null) { inPar = mo.GetMethodParameters("SetDNSServerSearchOrder"); inPar["DNSServerSearchOrder"] = dns; outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null); } else if (dns[0] == "back") { mo.InvokeMethod("SetDNSServerSearchOrder", null); } } }
// TODO: 代码里只有 dns 可以还原,其他的是使用重新开启 DHCP 的方法重置的,以后加入
额,大部分人已经知道怎么使用了,不过不知道,那再来一段实例吧:
/// /// 设置所有适配器的 DNS 服务器 /// 如设置失败不会产生错误,请在设置后获取当前 DNS 以检查是否成功 /// ///首选 DNS 服务器地址,如为 null 则设置为自动获取 ///备用 DNS 服务器地址,如为 null 且 d1 不为为 null 则备用为空 static void SetDNS(string d1, string d2) { if (d1 != null) { if (d2 != null) { SetNetwork(null, null, null, new string[] { d1, d2 }); } else { SetNetwork(null, null, null, new string[] { d1 }); } } else { SetNetwork(null, null, null, new string[] { "back" }); } }
写到这里应该明白了吧。。。不明白直接评论此文章问我~
请遵循 Ms-PL 许可证(自由使用,声明出处)
Comments | NOTHING