Installshield 总结系列之Basic MSI

时间:2022-12-04 22:41:32

为什么要写写篇博客呢? 目的就是方便自己日后复习的时候,自己的总结以后可以看一下,同时对于别人也是一个参考,帮助那些刚入门的人。

1. 什么是Basic MSI Project

Basic MSI project就是制作基于Windows Installer Engine的安装Installshield包(Installshield提供有限的支持,如Prevent Downgrade等),即我们常见的MSI格式的安装文件(也可以是以EXE形式的安装文件),只支持一些基本的命令和Windows的API,一句话,只能使用Windows Installer Engine支持的命令和API。

 

2: Multi Release, Multi Instance

什么情况下会需要Multi Release呢?

一个产品,它有多种安装版本,如如权限的不同,就好象试用版,正式版,专业版之类的。但安装的主体逻辑是一样的,可以把它们放在同一个MSI Project里面。

什么情况系需要Multi Instance

一个产品A是另外多个产品的一部分,为了独立维护(安装、卸载、神经)产品A,所以,需要独立的Product Code, Upgrade Code。即需要Multi Instance.

 

2.2如何定制不同的Release, Instance

打包过程的定制:这个可以借助于Release Flag, 每个Release可以定义支持的Release Flag, 同时在Componet那边标上对应的Flag.

安装过程的定制:可以在component的condition里面设置对应的条件,只有在满足条件的情况下,这个component才会被安装。

脚本执行的定制:在Release里面有一个Predefine Processor的选项,定义一个条件编译护符,在脚本里面写 #ifdef …#endif

3.Upgrade

对应Basic MSI, upgrade 分为major upgrade, minor upgrade.

什么情况下会发生minor upgrade,版本的上涨,package code的变化都会导致minor upgrade.

什么情况下需要做major upgrade. component的ID发生变化,component本身被删除或者属性被修改。merge modle的删除,修改。

                                              Release的msi name被修改等都需要做major ugrade,否则安装、维护的过程会出现问题。

PS:自己可以在Upgrade那一个页面,定制minor upgrade, major upgrade的行为。

PS:对应minor upgrade, version的change不能只是AA.BB.CC.DD的最后“DD”部分的变化,否则component不会被Overwrite。

 

4: Prevent Downgrade

Windows Installer本身是基于Product Code来管理应用程序的,对应相同的Product Code的产品,它不支持降级。

PS:在Installshield 2011 Basic MSI Project中,Multi Instance的Release是可以进行降级的!(应该是Installshield的一个缺陷!)。

 

这里的Prevent Downgrade机制,是针对Major Upgrade而言。

但是对于Installshield安装包,它还支持Major Upgrade,即程序变化比较大的时候,如component本身发生了删除时,就需要做major upgrade。Major upgrade意味着Product Code需要发生变化,而Windows Installer就会把它们当作两个独立的安装包。加入Upgrade Code,就可以把这两个产品联系起来,并做一些自定义的动作(在Upgrade的页面进行设置),如安装新产品前对老产品进行卸载。在Install Shield 2009后,就有一套默认的机制来Prevent Downgrade.

 

5.Silent Installation以及UI Level

对应Basic MSI project来说,静默安装要注意:
1. UI Sequence在静默安装时,不会被执行。

2. UI level=2表上静默安装,在对应的脚本的地方,需要进行处理,否则静默安装会被block住。静默安装时,只有系统自己弹出的窗口会被忽略,用户自己的messagebox还是会弹出来。

 

6.Support Drectory

Basic MSI和Installshield Project不太一样的地方是,support dir需要用MSIGetProperty来获取。

还有就是获取当前安装包执行的路径:它包括以exe方式运行时,setup.exe的位置,以及以msi方式运行时的位置。它们分别对应”SETUPDIR” “SRCDIR”。即需要考虑这两种情况。

 

如果上面有写的不对的,可以用以下方式进行交流。

邮箱:whp_lcyz@163.com