C# 设置本地连接的IP地址

代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Management;
using System.Net.NetworkInformation;
using System.Text.RegularExpressions;
using System.Xml;
using System.Windows.Forms;

namespace IpTransferTool
{
    publicpartial class Form1 : Form
    {
       private string[] ip;
       private string[] submask;
       private string[] getway;
       private string[] dns;
       public Form1()
       {
           InitializeComponent();
           LoadConfigXml();
       }

       private void LoadConfigXml()
       {
           XmlNodeReader reader = null;
           try
           {
               string eleName = "";
               XmlDocument doc = new XmlDocument();
               doc.Load("config.xml");
               reader = new XmlNodeReader(doc);
               while (reader.Read())
               {
                   switch (reader.NodeType)
                   {
                       case XmlNodeType.Element:
                           eleName = reader.Name;
                           //MessageBox.Show("Name" +eleName);
                           break;
                       case XmlNodeType.Text:
                           if (eleName.Equals("ip"))
                           {
                               ip = new string[1] { reader.Value };
                           }
                           else if(eleName.Equals("submask"))
                           {
                               submask = new string[1] { reader.Value };
                           }
                           else if(eleName.Equals("getway"))
                           {
                               getway = new string[1] { reader.Value };
                           }
                           else if(eleName.Equals("dns1"))
                           {
                               dns = new string[2] { reader.Value,"" };
                           }
                           else if(eleName.Equals("dns2"))
                           {
                               dns[1] = reader.Value;
                           }
                           //eleName = reader.Value;
                           //MessageBox.Show("Value" +eleName);
                           break;
                       default:
                           break;
                   }
               }
           }
           catch
           {
               MessageBox.Show("load xmlerror.");
           }
           finally
           {
               if (reader != null)
                   reader.Close();
           }
       }

       private void bAutoIP_Click(object sender, EventArgs e)
       {
           try
           {
               EnableDHCP();
           }
           catch
           {
               MessageBox.Show("EnableDHCP()error.");
           }
       }

       private void bSpecialIP_Click(object sender, EventArgs e)
       {
           try
           {
               //ip = newstring[1]{"192.168.2.119"};
               //submask = newstring[1]{"255.255.255.0"};
               //getway = new string[1]{"192.168.2.2"};
               //dns = new string[2] {"211.68.71.4","211.68.71.5" };
               SetIPAddress(ip,submask ,getway ,dns);
           }
           catch
           {
               MessageBox.Show("Special IP transfererror.");
           }
       }

       /// 
       /// 设置DNS
       /// 
       /// 
       public static void SetDNS(string[] dns)
       {
           SetIPAddress(null, null, null, dns);
       }
       /// 
       /// 设置网关
       /// 
       /// 
       public static void SetGetWay(string getway)
       {
           SetIPAddress(null, null, new string[] { getway }, null);
       }
       /// 
       /// 设置网关
       /// 
       /// 
       public static void SetGetWay(string[] getway)
       {
           SetIPAddress(null, null, getway, null);
       }
       /// 
       /// 设置IP地址和掩码
       /// 
       /// 
       /// 
       public static void SetIPAddress(string ip, string submask)
       {
           SetIPAddress(new string[] { ip }, new string[] { submask }, null,null);
       }
       /// 
       /// 设置IP地址,掩码和网关
       /// 
       /// 
       /// 
       /// 
       public static void SetIPAddress(string ip, string submask, stringgetway)
       {
           SetIPAddress(new string[] { ip }, new string[] { submask }, newstring[] { getway }, null);
       }
       /// 
       /// 设置IP地址,掩码,网关和DNS
       /// 
       /// 
       /// 
       /// 
       /// 
       public static void SetIPAddress(string[] ip, string[] submask,string[] getway, string[] dns)
       {
           ManagementClass wmi = newManagementClass("Win32_NetworkAdapterConfiguration");
           ManagementObjectCollection moc = wmi.GetInstances();
           ManagementBaseObject inPar = null;
           ManagementBaseObject outPar = null;
           foreach (ManagementObject mo in moc)
           {
               if(!mo["Caption"].ToString().Equals("[00000012]Realtek RTL8168/8111 PCI-E Gigabit EthernetNIC"))
                   continue;
               else
                   MessageBox.Show((string)mo["caption"]);
               //如果没有启用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);
               }
           }
       }
       /// 
       /// 启用DHCP服务器
       /// 
       public static void EnableDHCP()
       {
           ManagementClass wmi = newManagementClass("Win32_NetworkAdapterConfiguration");
           ManagementObjectCollection moc = wmi.GetInstances();
           foreach (ManagementObject mo in moc)
           {
               if(!mo["Caption"].ToString().Equals("[00000012]Realtek RTL8168/8111 PCI-E Gigabit EthernetNIC"))
                   continue;
               else
                   MessageBox.Show((string)mo["caption"]);
               //如果没有启用IP设置的网络设备则跳过
               if (!(bool)mo["IPEnabled"])
                   continue;
               //重置DNS为空
               mo.InvokeMethod("SetDNSServerSearchOrder",null);
               //开启DHCP
               mo.InvokeMethod("EnableDHCP",null);
           }
       }
       /// 
       /// 判断是否IP地址格式
       /// 
       /// 
       ///
       public static bool IsIPAddress(string ip)
       {
           string[] arr = ip.Split('.');
           if (arr.Length != 4)
               return false;
           string pattern =@"\d{1,3}";
           for (int i = 0; i < arr.Length; i++)
           {
               string d = arr[i];
               if (i == 0 && d =="0")
                   return false;
               if (!Regex.IsMatch(d, pattern))
                   return false;
               if (d != "0")
               {
                   d = d.TrimStart('0');
                   if (d == "")
                       return false;
                   if (int.Parse(d) > 255)
                       return false;
               }
           }
           return true;
       }

    }
}


生成安装文件的方法

1:新建安装部署项目
打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图)
此主题相关图片如下:

2:安装向导
关闭后打开安装向导,点击下一步,或者直接点击完成.
3:开始制作
安装向导完成后即可进入项目文件夹:
双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来.
C# 设置本地连接的IP地址_第1张图片
然后右击你的可执行文件,创建快捷方式,然后把快捷方式分别剪切或复制到左边的"用户的?程序?菜单"和"用户桌面"中.
这样安装程序安装安装完成后会在"开始->所有程序"和"桌面"上生成程序的快捷方式.
C# 设置本地连接的IP地址_第2张图片
然后右击左边的"应用程序文件夹"打开属性对话框:
将属性中的"defaultlocation"的路径中的"[manufacturer]"去掉,
不然的话做好的安装程序默认安装目录会是"c:\programmfile\你的用户名\安装解决方案名称";
然后打开解决方案管理器,右击你的解决方案名称,选择属性:
在打开的属性页中,选择"系统必备",
C# 设置本地连接的IP地址_第3张图片
在打开的系统必备页中,选中如下中的选择项,这个很重要!!!!!1!!!!!
选上以后,在生成的安装文件包中包含.netframework组件.(这个选项默认是没有选中的)
C# 设置本地连接的IP地址_第4张图片
好了,这样就完成99%了,然后点击"生成->生成解决方案",哈,生成成功!
4:制作完成
现在打开解决方案文件夹下的debug文件夹,就可以看到生成的安装文件了.
【续】关于"卸载"功能的添加
上面的文章只介绍了简单的生成安装的方法,
但是在vs.net2005下并没有直接生成卸载程序的功能,
所以我们只好用msi来实现了,
原理我就不讲了,网上一搜一堆,我只讲操作,

【1】:在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,
这个文件在c:\windows\system32文件夹下,
C# 设置本地连接的IP地址_第5张图片
添加进去以后,为了让他更像个卸载程序,把他的名字改成"Uninstall.exe",
当然这个关系不大,改不改都行的.
然后给他创建一个快捷方式,放到桌面或者"开始-程序"中,
我选择放在了开始菜单中,然后下面我们要的做的就是查找这个部署项目的ProductCode了,
鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性,
这个区别很大,这时你就可以看到ProductCode了,
C# 设置本地连接的IP地址_第6张图片
然后打开你创建的那个快捷方式的属性对话框,
在Aguements属性中输入"/x{ProductCode}",
C# 设置本地连接的IP地址_第7张图片
C# 设置本地连接的IP地址_第8张图片
好了,然后点击"生成解决方案"即可生成带有卸载功能的安装程序了.

你可能感兴趣的:(C# 设置本地连接的IP地址)