Installshield 總結系列之Basic MSI


為什么要寫寫篇博客呢? 目的就是方便自己日后復習的時候,自己的總結以后可以看一下,同時對於別人也是一個參考,幫助那些剛入門的人。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM