1、 点击【文件】-【新建】-【项目】-其他项目类型-安装和部署,选择安装项目,在下面的
名称栏填写SetupTest(或者选择安装向导,一直点击【下一步】)
2、 安装项目----六个子项依次为:文件系统编辑器、注册表编辑器、文件类型编辑器、用户界面编辑器、自定义操作编辑器、启动条件编辑器。其中我们在打包过程中经常要用到的有文件系统编辑器、注册表编辑器、用户界面编辑器和自定义操作编辑器。
3、 将要打包的项目导入到这个安装项目中。有两种导入方式:
第一种:手动方式。在文件系统目录下,右击左侧的应用程序文件夹(这个文件夹就是要打包的项目中需要的文件)-添加-文件或文件夹,找到要源程序,将可执行文件(导入时会将相关动态链接库一并导入)、数据库类文件、标识图片(logo)、安装启动画面(.bmp)文件、安装卸载图标(.icon)、用户协议(.rtf)等文件导入。
第二种:自动方式,在解决方案‘SetupTest’上右击-添加-现有项目-选择你要打包的项目(选择.csproj文件或者是.sln文件),这样就会把这个项目添加到该解决方案中来,
然后在安装项目SetupTest上右击-添加-项目输出-主输出,在项目下拉框中选择刚添加的项目,选择这样就会把这个要打包的项目的基本文件添加到左侧的应用程序文件夹中,名字为主输出来自**(活动)。
在第二种方式中,系统会自动将要打包的项目所依赖的依赖项添加到“检测到的依赖项”中,如Microsoft .Net Framework,如果没有就需要手动添加了。
在第一种方式中,依赖项需要手动添加,右击项目--添加--合并模块,选择要添加的文件,.Net Framework是必须的,位于:C:\Program Files\Common Files\Merge Modules\ 下。
注意在第二种方式中,如果要打包的项目有配置文件或数据文件等其他,还需要手动将它们添加到应用程序文件夹中。
4、 左键单击【应用程序文件夹】,查看其属性,DefaultLocation(在目标计算机上安装的默认路径) [ProgramFilesFolder][Manufacturer]\[ProductName],Manufacturer和ProductName都为SetupTest的属性值,其中 Manufacturer 是安装 Visual Studio 时使用的公司名,而 ProductName 是用于部署项目的名称。可以在安装项目的属性窗口中重写这两个设置。一般会把[Manufacturer]属性去掉,即默认安装路径为C;\Program Files\[ProductName](假设目标计算机的系统盘为C盘)。
然后设定SetupTest的属性值:
AddRemoveProgramsIcon:在目标计算机上的“添加/删除程序”对话框中显示的图标。
Author:应用程序的作者
InstallAllUsers:该程序是否为所有用户安装
Manufacturer:生产厂商
ProductCode:应用程序的唯一标识
RemovePreviousVersion:指定安装期间是否移除早期版本
然后打开解决方案管理器,右击你的解决方案名称,选择属性:打开的属性页中,选择"系统必备", 在打开的系统必备页中,在"指定系统必备安装组件的位置"中选中如下选择项:从与我的应用程序相同的位置下载系统必备组件。选上以后,在生成的安装文件包中包含.NetFramework组件。
5、 添加卸载程序。在第三步(上述3)时,将文件导入。有两种方式。
第一种:自己写代码,生成.exe文件,后在第三步(上述3)时,将此文件导入。
新编写控制台应用程序Myuninstall.exe,代码如下:
此处用到ProduceCode,即SetupTest的ProduceCode属性值
在引用中添加引用.NET System.Windows.Forms,System.Deployment,System.Drawing。将program.cs文件删除,添加新类Cass1.cs
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Reflection;
using System.Threading;
namespace Myuninstall
{
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
bool bCreateNew;
Mutex m = new Mutex(false, "DAgroGsinoTem20080410", out bCreateNew);
if (bCreateNew == true)
{
string sysroot = System.Environment.SystemDirectory;
System.Diagnostics.Process.Start(sysroot + "[url=file://\\msiexec.exe]\\msiexec.exe[/url]", "/x{E9E37B3F-FB17-4002-89CE-E1210057E6C4}");
}
else
{
MessageBox.Show("请先退出软件再进行卸载", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Application.Exit();
}
}
}
其中{ E9E37B3F-FB17-4002-89CE-E1210057E6C4}为安装项目的ProductCode属性值。
注意:右键Myinstall—属性,将输出类型选择为:Windows应用程序(否则会在调用卸载程序时弹出dos对话框)
右键Myinstall重新生成。待重新生成成功后,回到3,导入文件Myinstall.exe
第二种:直接导入系统文件 ,找到文件msiexec.exe
C:\ Windows\system32\ msiexec.exe
6、 建立目标计算机上的开始-程序菜单和桌面的快捷方式
右击应用程序文件夹中的可执行文件(.exe文件)-创建快捷方式,创建完后,可以重命名为合适的中文名,将该快捷方式剪贴到用户的“程序”菜单中,一般可以先在“程序”菜单中创建一个文件夹。同样的,再创建一个到用户桌面中(创建两次,剪切两次)。同理创建卸载快捷方式,一般放在开始程序菜单中,分别给定icon属性值(在应用程序文件夹中浏览打开)。注意:若选择第二种方式添加卸载程序,需要设置其快捷方式的Arguments属性值为:/x { E9E37B3F-FB17-4002-89CE-E1210057E6C4} ({E9E37B3F-FB17-4002-89CE-E1210057E6C4}为ProductCode属性值)
7、 右击解决方案,重新生成解决方案。生成成功后,安装包制作完成。
综上述,简单的应用程序安装包制作完成!但若想优化(如添加安装欢迎界面、添加用户协议等),还得继续下面的操作。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/iouuoi/archive/2010/03/09/5361528.aspx
8、 在2时,简单介绍了安装项目包括六个子项,而上述内容只是介绍了第一个部分文件系统编辑器,下面介绍其它部分。
l 注册表编辑器
可以向注册表中插入键,在安装应用程序的同时创建注册表项。
l 用户界面编辑器
系统自动提供一组在安装期间显示的默认对话框。根据正在构建的项目的类型,所提供的这组对话框有所不同。使用用户界面编辑器,可以将对话框重新排序或删除对话框。在编辑器中显示的对话框树包含两部分:安装与管理员安装。安装部分包括终端用户运行安装程序时显示的对话框,而管理员安装部分包含系统管理员将安装程序上传到某个网络位置时显示的对话框。如果想构建一个没有用户界面的安装,只需在对话框树上删除安装部分中的所有对话框。或者,可以从一组可用的模板将对话框添加到安装项目中。
在用户界面下,右击【启动】--添加对话框,类型有启动画面、自述文件、许可协议、注册用户、RadioButton、复选框、文本框等。
(1)启动画面:属性SplashBitmap 安装对话框中的图片;Sunken 是否凹凸显示
(2)自述文件:如果有自述文件对话框(或者许可协议对话框),则在文件系统中要添加一个.rtf格式的文件(注意:改文件一定要通过word另存为.rtf格式得到,不可以通过记事本创建文件后把扩展名改为.rtf而得到,那样将不显示许可协议)。
(3)欢迎使用:根据要求进行更改。
(4)许可协议:同自述文件
(5)注册用户:
(6)客户信息:
在“用户界面”编辑器中,将“客户信息”节点拖放到“欢迎使用”与“安装文件夹” 之间。在“客户信息”属性窗口中,设置BannerBitmap属性,将SerialNumberTemplate属性修改成“<##-?????>”。SerialNumberTemplate属性决定文本框在对话框中的显示方式,并确定是仅对序列号的格式进行验证,还是按照 Windows 安装程序算法对序列号进行验证。SerialNumberTemplate属性的有效可编辑字符可以是“#?%^<>”,其中#表示要求输入一个数字,该数字将不包括在验证算法中。%表示要求输入一个数字,该数字将包括在验证算法中。?表示要求输入一个字母数字字符,该字符将不包括在验证算法中。^表示要求输入一个大写字母或一个数字。<和>表示该字符左边或右边的所有字符在对话框中都不可见。
起初,SerialNumberTemplate 被大于号和小于号括起来(即“<”和“>”),这些符合不会在文本框中直接显示出来。也可以用短划线把序列号分隔在多个文本框内。
将ShowSerialNumber属性设置为True,
对于模板自身可以使用下面的字符:
# 要求是一个数字,但不执行额外校验。
? 要求是一个英文字母,便不执行额外校验。
^ 要求是一个大写字母或一个数字,但不执行额外校验。
% 要求是一个数字,这个数字被内置校验算法使用。
? 要求是一个英文字母,这个字母被内置校验算法使用。
别的任何字符都被文字常量对待。校验算法(对于“%”和“?”而言)已经被构建进了Windows Installer 服务当中。 它合计所有的数字,并且除以7。如果余数是0,则校验成功,否则失败。
FontViewer 安装程序使用的模板是 <%%D-##-##>,它使用了三个文本框。最后四个字符必须是数字,第三个字符必须是字母“D”,并且头两个数字之和必须被7整除(例如一个合法序列号:77D-00-00)。
(7)其它类似
l 自定义操作编辑器
l 启动条件编辑器
终于整理完了!呵呵