自从VS2012去掉了自家的Windows Installer改用InstallSheild之后,打包程序总是找不到满意的工具,最后投奔Advanced Installer,界面简洁,操作简单,功能也很强大。

使用Advanced Installer打包程序的常规步骤如下:

#1 产品信息 #

如图所示,填写Product Name, Product Version 和 Product Company. 这里需要解释一下Product Version与Product Code、Update Code之间的关系:

Advanced Installer新建安装包项目初期,会自动生成一个Product Code和Update Code,如下图所示:

熟悉windows的朋友一定知道Product Code,使用命令行卸载某一个程序的时候就需要用到Product Code,它是一个产品的唯一标识。按照字面意思理解,Update Code是用来给程序做升级标识的,所以如果要给某一产品安装升级版本,且让升级安装包自动覆盖旧程序,应该保持Product Code不变并重新生成Update Code,但事实上这样操作是错误的

给程序制作升级安装包正确的方法是:

保持Update Code不变,需要重新生成Product Code,这样安装之后,系统先是卸载旧的程序再安装新的程序,从而达到升级的目的,所以现在应该能够理解为什么要生成新的Product Code了吧?因为牵扯到卸载程序,所以必须要有唯一的Product Code。

我们在Upgrades选项卡中可以到默认状态下是先卸载旧程序,再安装新程序的:

接下来说一下 Product Version ,一般填写三位或四位,如1.0.0 ,1.0.0.0,改写前三位中的任意一位然后保存,都会弹出如下的对话框:

当选择Major Update后,会自动生成新的Product Code,同时保持Update Code不变,所以如果要制作升级包,那么修改Product Version后点击Major Update就可以了,不需要再去手动生成Product Code和Update Code。

如果选择了Patch,不会修改Product Code和Update Code,这时候由于新安装包与旧程序Product Code一致,会提示已安装该程序,需要先手动卸载旧程序再安装新程序,这样就不能满足自动覆盖旧程序的需求。

需要注意的是Product Version是四位的话,修改第四位,如1.0.0.1,会弹出如下的提示:

也就是说Windows Installer不会把第四位的修改作为新安装包,即使是手动生成一个新的Product Code,安装程序也不会卸载旧的安装包,这样系统中就会存在两个产品。

总结:发布一个新的升级包,需要修改 Product Version 的前三位,并点击 Major Update。

2 安装依赖项

如果安装程序需要一些依赖的安装包,如.net framework,可以在这里配置,其中Pre-install表示前置安装条件,只有安装了这些软件才能进行下一步安装:

这里其实有个小小的问题,在安装Pre-install程序时,直接取消这些依赖程序的安装,Advanced Installer会认为你已经安装了这些依赖包,就可以直接进行程序主体的安装了。

依赖包可以使用本地版本,直接打进程序安装包,也可以使用网络下载方式,切换到Setup Files选项卡,按照需求选择即可:

最后在Launch Condition选项卡中,可以勾选一些启动条件,如内存大小,分辨率等,这里就不再多说了:

3 资源文件

接下来把打包的资源文件添加进来:

右键Application Folder–Properties–Synchronize,选择需要打包的资源文件路径:

这样Advanced Installer就会自动同步更新该文件夹下的文件,或者你也可以自己手动Refresh。

然后可以创建快捷方式:

点击左上角魔法棒图标,选择New Shortcut

A file installed by this package是添加资源文件下应用程序的快捷方式,The uninstaller of this package是添加卸载安装程序的快捷方式:

选择快捷方式的目标位置:

然后选择快捷方式的源就可以了。

如果资源文件中有需要注册的ocx,dll,需要右键该文件,properties,进入Registration选项卡,勾选Auto Register file,根据需要选择注册方式。

4 发布设置与其他

发布设置要说一下安装包类型:

主要分为MSI和EXE,single表示为整体的一个安装包,不是single的就会生成一个文件夹,包含msi,exe和一些资源文件。

Output区域可以填写安装包名称和输出路径等信息。

User Interface中可以做一些自定义信息:

在Themes里可以设置安装界面主题,Dialogs里可以设置安装对话框。

常用的功能大概就这么多了,Server选项卡中还可以设置IIS,不过没有亲测过,总体来说Advanced Installer能够满足一般应用程序打包的需求,操作简洁明了,值得一用。