最近需要制作windows的安装包,据说Advanced Installer比较强大,遂拿它来制作安装包。在网上少量资料以及官网简约文档中摸索前进,总算是制作出可用的安装包,在此记录,仅供参考。
Advanced Installer版本: Advanced Installer 11.0, 目前的最新版是13.1,不过大同小异。
2.1 新建工程
由于希望能够自己定制一些安装界面,我们选择Professinal版本,语言选择中文,然后创建工程:
2.2 产品详情
填写产品的基本信息,包括名称,版本,公司等:
2.3 安装参数
产品详情填好后,在左侧选择安装参数。咱们主要看右侧面板中“安装文件夹”->“应用程序文件夹”里面的内容:“[ProgramFilesFolder][Manufacturer]\[ProductName]”, 这个内容表示安装时默认的安装路径:
[ProgramFilesFolder] 表示 C:\Program Files(x86)
[Manufacturer] 表示公司名称,也就是2.2中填写的TestCompany
[ProductName] 表示产品名称,也就是2.2中填写的TestApp
那么默认显示的安装路径就是“C:\Program Files(x86)\TestCompany\TestApp”。
2.4 运行环境
左侧的数字签名、更新程序、升级和授权暂时不是关注的重点,先略过。Advanced Installer对运行环境提供了非常好的支持,我们可以选择任何需要的环境。待安装包制作完毕,运行安装包时会自动运行依赖的环境:
2.5 文件和文件夹
左侧的启动条件和合并模块暂时不是关注的重点,先略过。文件和文件夹里面放的就是我们的项目文件,可以选择新建或添加:
添加文件后,可能会是这样的:
2.6 对话框
由于我们希望能够自制对话框,需要切换成开发版。点击“项目”->"选项",在弹出的界面中,选择“项目类型”->“开发版”
假设我们要在选完安装路径后新增一个对话框,那么在右侧的FolderDlg右键,选择“新建对话框”:
让我们在对话框上添加两个输入控件,一个希望是必填的,另一个希望是选填的。注意右侧的属性名称,它是实现“必填”功能所必须关注的变量:
那么什么时候对输入框中是否有输入进行判断呢?应该是在用户点击“下一步”的时候。所以选择“下一步”,关注下方的“发布事件”:
我们需要新建一个事件,这个事件的作用是:如果必填项没有内容,那么弹出一个对话框来提示用户需要输入。想要做到这一点,点击“新建”。在新弹出的界面中选择“显示特定子对话框”,勾选“显示整个条件”,然后再条件中填写“NOT EDIT_1_DROP”。EDIT_1_DROP这个变量就是之前必填输入控件,前面加NOT的意思就是,如果这个输入控件没填内容,就弹出子对话框。
点击“确定”就可以了。
2.7 注册表
我们已经限定了必填项和选填项,但是又有疑问了,用户填写的内容保存在哪呢?我们能从什么地方读到这些变量呢?
这时候注册表就派上用场了,把用户输入的内容关联到注册表的相应变量中不就搞定了吗?Advanced Installer恰恰提供了这种机制。
在左侧选择“注册表”,我们可以看到右侧的注册表中已经有了两个变量Path和Version,分别是安装路径和版本。
然后在右侧的“[ProductName]”右键弹出菜单,点击“新建值”,
在弹出的窗口中,“名称”填写一个希望在注册表中被看到的名称,比如“RequiredValue”。再点击“属性”,选择之前自定义的对话框中的控件名称(就是咱们)。
创建好后如下:
2.8 自定义操作
梳理下刚刚的流程,用户在输入框中输入了内容,点击下一步后,这些内容被保存到注册表的相应位置。然后这些变量要用起来了,一种可能的场景就是,在安装结束时,我希望去执行自定义的脚本,这个脚本会从注册表中读取这些变量,并基于这些变量对项目文件做初始化。
那么执行自定义脚本就需要Advanced Installer的“自定义操作”来帮忙,在左侧选择自定义操作,然后在菜单栏单击“新建自定义操作向导”:
在弹出的面板中点击“下一步”,然后根据自己要执行的脚本或文件选择不同类型:
然后点击下一步,根据情况选择:
然后点击如图按钮选择源文件:
然后下一步,根据需要选择,再下一步,完成。完成后,在右侧界面中可以选择必要的选项,比如说隐藏窗口,或者是以管理员身份运行等。
2.9 构建和运行
如图,点击1呢是构建安装包,构建的目录默认是在“我的文档\Advanced Installer\Projects\TestApp\setup-SetupFiles"中,其中TestApp是项目名称。
点击2呢是构建并运行安装包,用作测试这个安装包是否可用。
至此我们打出了windows 32位的有自定义界面的并能调用特定脚本的包。Advanced Installer还提供了各种强大功能,比如说能打出x86\x64混合包等,有待进一步探索。