详细见AppInstall网站中《单MSI引导多MSI安装和卸载》一章,http://www.appinstall.cn/viewthread.php?tid=840&extra=page%3D1。
有关安装包嵌套调用,之前也琢磨过很多中办法,IntallScript,InstallScript MSI,MSI各种类型互相嵌套,但惟独发现MSI包无法嵌套,原因很简单,Windows Installer只接受单实例安装。
解决方案:
1. 首先创建主Basic MSI工程,设计组织你的安装程序。
2. 【Installation Designer】 -> 【Media】 -> 【Releases】视图, 选中Chained .msi Packages,点击鼠标右键选择New Chained Package Ins
3. 在Installation(run-time path)添加MSI包,出现提示时选择Yes(此情况适合压缩的安装包)
4. Product code保留默认
5. UI Level建议选择No UI(/qn),静默安装
6. Install condition就是默认的Not Installed
7. Install properties就保留默认空,其他如爱新觉罗.奕所讲的“此处填安装msi的参数,例如ADDLOCAL=ALL COMPANYNAME=MS”
8. Removal condition输入:Not Installed,如果保留默认的REMOVE="ALL",卸载时在系统的“添加/删除”里子MSI包没被清空,其实已经卸载了
9. Remove properties默认为空
10. Release flags默认为空
11. Streamed files中就是默认你的子MSI包
12. Delete streamed files after installation保留默认的勾选
13. 之后重新Build安装包并安装,你会在系统的“添加/删除”中看到主MSI程序和子MSI程序都被安装包目标机上
补充:
1. 必须是通过Windows Installer 4.5以上版本(可以通过Redistributables添加Windows Installer 4.5,目前Windows XP系统的Windows Installer多为3.1)
2. 步骤7中如果设置了 ARPSYSTEMCOMPONENT=1 可以将子MSI程序隐藏(不在系统的“添加/删除”里显示)
3. 如果非压缩的安装包,可以在步骤3中选择No,之后将子MSI添加到Support Files/Advanced Files/Disk 1下,调用的根路径是[SourceDir],之后按照相应文件结构调用