為什么要寫寫篇博客呢? 目的就是方便自己日后復習的時候,自己的總結以后可以看一下,同時對於別人也是一個參考,幫助那些剛入門的人。
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”。即需要考慮這兩種情況。
如果上面有寫的不對的,可以用以下方式進行交流。
