http://www.cnblogs.com/shiaupo/archive/2011/01/18/1938519.html
从VS2005开始已经集成了windows installer(vs2005以前的版本没有用过),可用vs的这个工具可以轻松将你的程序进行打包发行;
1.首先创建你的应用程序并发布release版本,以MyTest.exe为例;
2.创建一个安装项目工程
3.接下来就是要将你的应用程序添加到安装包中,应用程序文件夹右键-添加-文件 选择你的应用程序MyTest.exe
如果你的应用程序是一个windows服务的话则还需要在自定义编辑操作中添加安装操作,安装-添加自定义操作-应用程序文件夹-选择你的服务;
4. 就这样一个简单的安装包就完成了,是不是很简单。但是在现实应用中还有许多我们需要设置的地方:比如说在桌面创建一个快捷方式、在开始菜单中创建快捷方式,或许还需要设置应用程序安装的文件夹以及应用程序属性等,这些都不在这做一一说明。
5.有些童鞋可能需要问,我这安装程序怎么没有卸载功能,接下来我们就给示例:
创建一个window应用程序取名为uninstall,然后在Form1的Load事件中添加如此代码:
{
this .Hide();
if (MessageBox.Show( " 是否删除MyTest " , " 卸载提示 " , MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
{
System.Diagnostics.Process.Start( " msiexec " , " /x {741A0689-EB4A-43A0-ADF9-F545476B3AFF} /qr " );
}
Application.Exit();
}
在这里我们借助了window下的msiexec组件来完成卸载,后面的一串参数是你的安装程序中的ProductCode(去你的安装项目属性中找吧);
使用控制台项目也可以完成对应的功能,但是有个黑窗口在那闪很不友好
6. 如果需要在安装完成应用程序的启动则继续:
新建一个类库,添加一个安装程序类instanller,然后重写OnAfterInstall,直接给代码:
/// 重写安装完成后函数
/// 实现安装完成后自动启动已安装的程序
/// </summary>
/// <param name="savedState"></param>
protected override void OnAfterInstall(IDictionary savedState)
{
base .OnAfterInstall(savedState);
// 启动服务
try
{
ServiceController sc = new ServiceController();
sc.Start();
}
catch (System.InvalidOperationException)
{ }
// 启动应用程序
Assembly asm = Assembly.GetExecutingAssembly();
string path = asm.Location.Remove(asm.Location.LastIndexOf( " // " )) + " // " ;
System.Diagnostics.Process.Start(path + " //MyTest.exe " );
}
然后在安装项目工程点击右键选择添加项目输出-主输出,选择你刚才创建的installer组件库,自定义操作编辑器-安装(右键)-添加自定义操作-选择你的installer输出。编译生成,大功告成。