Wix學習整理(3)——關於Windows Installer和MSI


關於Windows Installer

Windows Installer是微軟Windows操作系統自帶的一個軟件安裝和配置服務,其實現了軟件安裝的業務邏輯:如何安裝軟件?如何修改注冊表鍵值?如何創建快捷方式?如何操作網站目錄或注冊服務?等等。Windows Installer技術由兩部分組成:客戶端安裝程序服務(Msiexec.exe)和Microsoft軟件安裝包文件(MSI)。

關於MSI

Windows Installer是從一個數據庫中來獲取軟件安裝的相關信息。MSI文件就是一個Windows Installer的數據庫,它包含了安裝一種產品所需信息、安裝(或卸載)程序所需的指令和數據;它將程序的組成文件和功能關聯起來;它還包含有關安裝過程本身的信息,如目標文件夾路徑、系統依賴項、安裝選項和控制安裝過程的屬性。

MSI數據庫的幾個重要表

既然MSI是一個數據庫,那么它就應該由多個關系表來組成。下面我們就簡單地介紹MSI的幾個重要的表。

表格 1 MSI的幾個重要表說明

表名

說明

Directory

指定了產品的目錄結構,包括源目錄結構和目標目錄結構。

Component

指定了產品的基本組件結構。

Feature

Component的組合就稱為Feature,是用戶選擇安裝的可視部件。

File

指定了需要安裝到目標目錄的文件。

ShortCut

記錄了產品需要在目標計算機上安裝快捷方式所需的信息。

Register

記錄了產品需要在目標計算機上注冊的注冊表鍵值信息。

Property

記錄了產品安裝過程中所需的屬性值。

Feature表和Component表

Feature和Component是軟件安裝中非常重要的兩個概念。Feature和Component都可以翻譯為組件,兩者的區別可以說是:Feature是邏輯上的而Component是物理上的。Feature是應用或產品所有功能的一個子集,用戶可以獨立地選擇是否安裝。Component是產品或應用的最小組成單元,它可以由一個文件,或一個快捷方式,或一個注冊表鍵值,或它們的組合來組成。

Feature是由Component組成的。Feature具有樹狀嵌套結構,最大深度為16。在安裝的過程中,可以由用戶來選擇是否安裝某個Feature。若父Feature沒有被選擇,則子Feature也不會被安裝。

Component是產品或應用的一小片,每一個要安裝的Component都要由一個唯一的GUID值來標識,以便Windows Installer進行跟蹤。若某個Component沒有GUID值,則安裝時不會被安裝注冊,無GUID的Component一般用於只在安裝時的功能實現,例如刪除某些臨時文件等。

Directory表說明

Directory表指定了產品安裝的目錄結構,包括目標目錄結構和源目錄結構。Directory表有三個表項:標識符ID、父目錄Directory_Parent和DefaultDir。表項Directory_Parent指向該目錄的父目錄,而通過表項ID和DefaultDir的值來確定目標目錄結構和源目錄結構。

目錄結構必須有且僅有一個根目錄,這個根目錄的標識符必須指定為TARGETDIR(TARGETDIR是Windows Installer預定義的屬性,其值可以通過命令行或用戶界面進行設置),而根目錄的SourceDir則必須指定為SourceDir(SourceDir默認的屬性值為.msi文件所在的路徑)。如果屬性TARGETDIR的值被指定了,則目標根目錄為TARGETDIR的屬性值;若該屬性未有值,則目標根目錄為Windows Installer預定義屬性ROOTDRIVE的值。而源根目錄則為SourceDir的屬性值。

對於非根目錄,若Directory的標識符ID中指定的屬性被定義了,則該屬性的值即為目標目錄,否則取DefaultDir表項中的值作為目標父目錄下的一個子目錄。而源目錄則是將DefaultDir表項中指定的值作為源父目錄的一個子目錄。

五個必需屬性

每個安裝包必須要有五個必需屬性(Required Properties):ProductCode、ProductLanguage、Manufacturer、ProductName和ProductVersion。

表格 2 五個必需屬性

屬性名

說明

ProductCode

唯一的、大寫的GUID值,用於標識要安裝的產品。

ProductLanguage

指示了用戶界面上除寫入數據庫的字符串外的其余字符串所用的語言的數字ID(如1033、2046)。

Manufacturer

指示產品生產廠商的字符串值。

ProductName

產品名稱。

ProductVersion

產品版本號,版本號的格式為major.minor.build,其中major和minor最大數字為255,build的最大數字為65535。


免責聲明!

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



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