代码如下:
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:开始制作
安装向导完成后即可进入项目文件夹:
双击"应用程序文件夹"在右边的空白处右击,选择添加->文件,将你的做的应用程序的可执行文件和相应的类库和组件添加进来.
然后右击你的可执行文件,创建快捷方式,然后把快捷方式分别剪切或复制到左边的"用户的?程序?菜单"和"用户桌面"中.
这样安装程序安装安装完成后会在"开始->所有程序"和"桌面"上生成程序的快捷方式.
然后右击左边的"应用程序文件夹"打开属性对话框:
将属性中的"defaultlocation"的路径中的"[manufacturer]"去掉,
不然的话做好的安装程序默认安装目录会是"c:\programmfile\你的用户名\安装解决方案名称";
然后打开解决方案管理器,右击你的解决方案名称,选择属性:
在打开的属性页中,选择"系统必备",
在打开的系统必备页中,选中如下中的选择项,这个很重要!!!!!1!!!!!
选上以后,在生成的安装文件包中包含.netframework组件.(这个选项默认是没有选中的)
好了,这样就完成99%了,然后点击"生成->生成解决方案",哈,生成成功!
4:制作完成
现在打开解决方案文件夹下的debug文件夹,就可以看到生成的安装文件了.
【续】关于"卸载"功能的添加
上面的文章只介绍了简单的生成安装的方法,
但是在vs.net2005下并没有直接生成卸载程序的功能,
所以我们只好用msi来实现了,
原理我就不讲了,网上一搜一堆,我只讲操作,
【1】:在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,
这个文件在c:\windows\system32文件夹下,
添加进去以后,为了让他更像个卸载程序,把他的名字改成"Uninstall.exe",
当然这个关系不大,改不改都行的.
然后给他创建一个快捷方式,放到桌面或者"开始-程序"中,
我选择放在了开始菜单中,然后下面我们要的做的就是查找这个部署项目的ProductCode了,
鼠标左键单击项目名称,记住是左键单击,然后点击属性标签,注意:不是右击的属性,
这个区别很大,这时你就可以看到ProductCode了,
然后打开你创建的那个快捷方式的属性对话框,
在Aguements属性中输入"/x{ProductCode}",
好了,然后点击"生成解决方案"即可生成带有卸载功能的安装程序了.