1 Windows Installer 概述
Windows Installer 是 Windows 操作系統的組件,它可以簡化應用程序的安裝過程。
通過應用安裝過程期間集中定義的一組安裝規則,Windows Installer 可以管理應用程序的安裝和刪除。還可以使用此項服務修改、修復或刪除現有的應用程序。Windows Installer技術由用於 Windows 操作系統的 Windows Installer 服務以及包含有關應用程序設置和安裝信息的程序包 (.msi) 文件格式組成。
Windows Installer 也是可擴展的軟件管理系統。Windows Installer 管理軟件組件的安裝、添加和刪除,監視文件復原,以及通過回滾方式維護基本的故障恢復。Windows Installer支持從多種來源安裝和運行軟件,並且開發人員可以自定義 Windows Installer 以安裝自定義應用程序。
2 Windows Installer 的功能
使用 Windows Installer 和 .msi 程序包文件格式,軟件安裝與刪除將更加可靠和具有彈性。Windows Installer 還提供更多安裝選項。Windows Installer 執行以下任務:
2.1 安裝失敗后恢復原始計算機狀態
Windows Installer 跟蹤在應用程序安裝過程中對系統所做的所有更改。如果安裝失敗,Windows Installer 能重新恢復系統,或者使系統返回到初始狀態。
2.2 幫助阻止應用程序間沖突
Windows Installer 加強了安裝規則,這有助於阻止現有應用程序在共享資源時產生沖突。當安裝操作更新現有應用程序共享的動態鏈接庫 (.dll) 時,或某個操作刪除其他應用程序共享的動態鏈接庫時,會導致這樣的沖突。
2.3 安全地刪除現有程序
Windows Installer 可以安全地卸載以前安裝的任何程序。除被其他已安裝軟件共享使用的內容之外,它將刪除所有關聯的注冊表項和應用程序文件。成功地安裝應用程序之后,可在任何時候卸載。(刪除不能和“返回”功能混淆,后者是在安裝失敗時將計算機恢復到初始狀態)。
2.4 診斷和修復損壞的應用程序
應用程序可以查詢 Windows Installer,以確定安裝的應用程序是否具有丟失或損壞的文件。如果檢測到任何丟失或損壞的文件,Windows Installer 通過重新復制那些丟失或損壞的文件修復該應用程序。
2.5 支持按照需要安裝應用程序的功能
Windows Installer 可配置為最初只安裝應用程序的最小子集。以后,當用戶第一次訪問需要其他組件的功能時,將自動安裝其他組件。這稱作“公布”。例如,Windows Installer 可以安裝功能最少的 Microsoft Word。當用戶第一次訪問郵件合並功能時(在原始安裝中未包括此功能),Windows Installer 將自動安裝郵件合並組件。同樣,Windows Installer 還可以清除應用程序中不使用的組件。例如,可以將 Windows Installer 配置為,如果郵件合並組件 60 天不用,則刪除該組件。
2.6 支持無人參與的應用程序安裝
安裝程序包可配置成安裝過程中無需與用戶進行交互。在安裝過程中,Windows Installer 可以向計算機查詢桌面屬性,包括確定應用程序是否以前都被 Windows Installer 安裝過。
2.7 支持 32 位和 64 位的應用程序
32 位應用程序可以安裝在 64 位的計算機上。
2.8 支持 Microsoft .NET Framework
Microsoft .NET Framework 是新的、可生成集成的、面向服務的應用程序的平台,這些應用程序從多種類型源中獲得信息並與源交互,而不管正在使用的平台或者語言。.NET Framework 和公共語言運行庫可提供一次編寫、一次編譯、任意位置運行的應用程序開發。具體地講, .NET Framework 可以提供代碼重新使用、代碼規范化、資源管理、多語言開發、安全、部署和管理。
2.9 與並排組件集成
此功能通過允許將基於組件版本設計和測試的應用程序綁定到該版本組件,從而消除了 .dll 版本沖突,而不管使用該應用程序的計算機如何。並排組件支持同時執行每個組件的多個版本。
2.10與軟件限制策略集成
此功能提供了防病毒支持,包括防止通過電子郵件和 Web 傳播特洛伊木馬病毒和蠕蟲病毒。軟件限制策略使執行簡單點擊、上下文活動頻繁的用戶感到安全。組策略使該策略作為受信的應用程序列表的一部分來執行,Windows Installer 使用這些軟件限制策略允許的應用程序進行操作。
3 Windows Installer 技術
Windows Installer 技術分為兩部分(這兩部分聯合工作):客戶端安裝程序服務 (Msiexec.exe) 和軟件包文件 (.msi file)。Windows Installer 使用包含在軟件包文件中的信息來安裝應用程序。以下講述 Windows Installer 技術:
3.1 安裝程序服務
Windows Installer 是一種允許操作系統管理安裝過程的操作系統服務。
•
3.2 安裝程序
Msiexec.exe 程序是 Windows Installer 的一個組件。該程序使用動態鏈接庫 Msi.dll 讀取程序包文件 (.msi)、應用轉換 (.mst) 以及合並命令行選項。該安裝程序執行所有與安裝相關的任務:將文件復制到硬盤、修改注冊表、創建桌面快捷方式以及必要時顯示查詢用戶安裝首選項的對話框。
在計算機上安裝 Windows Installer 時,將修改操作系統的文件關聯功能以便識別 .msi 文件類型。當用戶雙擊帶 .msi 擴展名的文件時,操作系統將 .msi 文件與 Windows Installer 關聯並運行 Msiexec.exe 應用程序。
•
3.3 安裝程序包文件
每個程序包 (.msi) 文件都包含關系型數據庫,存儲着通過多種安裝方案安裝(和卸載)程序所需的全部指令和數據。例如,程序包文件可以包含在已經安裝應用程序的以前版本的情況下安裝此應用程序的指令。程序包文件還可以包含在從未裝過該應用程序的計算機上安裝此應用程序的指令。
•
3.4 轉換
可以通過將轉換 (.mst) 應用到安裝數據庫來操縱安裝過程。轉換過程將更改數據庫元素。例如,Windows Installer 可以使用轉換文件更改應用程序的用戶界面語言。Windows Installer 轉換文件將修改安裝時的安裝程序包文件,因此能動態影響安裝操作。
如果您在使用“組策略軟件安裝”,您應當注意除了在安裝時,在分配和發布時,也將應用轉換。在實際術語中,這表示在您單擊“確定”之前需要確保程序包屬性對話框的“修改”選項卡是按照所需方式設置的。如果您忽略了這一步操作並部署了轉換錯誤的程序包,則需要刪除軟件並重新部署,或者用正確轉換的版本升級該軟件。
自定義轉換,很像修補程序,始終保留在計算機的緩存中。只要 Windows Installer需要對安裝程序包執行配置更改,這些轉換就會應用到基本程序包文件。轉換只能在初始安裝時應用,而不能對已安裝的應用程序應用。
4 使用Windows Installer
4.1 在所管理的環境中的 Windows Installer
Windows Installer 是 IntelliMirror 的主干,也是基於組策略的更改和配置管理技術的核心組件。通過使用 IntelliMirror 技術、組策略以及更改和配置管理,管理員可批准特定應用程序,指定在這些應用程序上的所有配置操作(安裝、刪除和修復)都在本地系統帳戶下運行。管理員控制並管理文件系統和注冊表,而 Windows Installer 執行用戶啟動的軟件安裝。只有管理員批准的應用程序才能以更高特權運行。有關 Windows Installer 的詳細信息,請參閱使用 Windows Installer。
管理員使用 Active Directory、IntelliMirror 和組策略向企業內部的用戶組或計算機組指派和發布應用程序。Active Directory 是一種安全的、分布式的、分區的、復制的目錄服務,用來提供管理服務。這些服務包括企業內部資源定位以及將組策略用於 Active Directory 所管理對象的標准方法。有關 Active Directory 的詳細信息,請參閱 Active Directory。
4.2 Msiexec(命令行選項)
4.2.1 安裝或配置產品
語法
msiexec /i {Package | ProductCode}
參數
/i
安裝或配置產品。
Package
指定 Windows 安裝程序包文件的名稱。
ProductCode
指定 Windows 安裝程序包的全局唯一標識符 (GUID)。
備注
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
示例
要從 A:/Example.msi 安裝某一產品,請鍵入:
msiexec /I A:/Example.msi
4.2.2 使用管理安裝選項
語法
msiexec /a Package
參數
/a
應用管理安裝選項。
Package
Windows 安裝程序包文件的名稱。
備注
Windows Installer 命令行選項不區分大小寫。
•
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
4.2.3 修復產品
語法
msiexec /f [p][o][e][d][c][a][u][m][s][v]{Package | ProductCode}
參數
/f
啟用下表中的一個或多個命令行選項。
命令 | 描述 |
p | 只有文件丟失時才重新安裝。 |
o | 如果文件丟失或安裝了舊版本,則重新安裝。 |
e | 如果文件丟失或安裝了相同或更舊的版本,則重新安裝。 |
d | 如果文件丟失或安裝了不同的版本,則重新安裝。 |
c | 如果文件丟失或存儲的校驗和不符合計算值,則重新安裝。 |
a | 強制重新安裝所有文件。 |
u | 重新寫入全部所需的用戶特定的注冊表項。 |
m | 重新寫入全部所需的計算機特定的注冊表項。 |
s | 覆蓋所有現有的快捷方式。 |
v | 從資源運行或重新緩存本地程序包。 |
Package
Windows 安裝程序包文件的名稱。
ProductCode
Windows 安裝程序包的全局唯一標識符 (GUID)。
備注
該選項將忽略從命令行鍵入的任何屬性值。
該命令行選項的默認參數是 /fpecms。
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
示例
要修復安裝程序包,請鍵入:
msiexec /fpecms example.msi
4.2.4 卸載產品
語法
msiexec /x {Package | ProductCode}
參數
/x
卸載產品。
Package
Windows 安裝程序包文件的名稱。
ProductCode
Windows 安裝程序包的全局唯一標識符 (GUID)。
備注
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
示例
要刪除或卸載程序包,請鍵入:
msiexec /x Example.msi
4.2.5 公布產品
語法
msiexec /j [{u | m}] Package
msiexec {u | m} Package /t TransformList
msiexec {u | m} Package /g LanguageID
參數
/j
公布產品。
u
向當前用戶公布。
m
向計算機的所有用戶公布。
Package
指定 Windows 安裝程序包文件。
/g LanguageID
標識語言。
/t TransformList
將變換應用到已公布的程序包。
備注
該選項將忽略從命令行鍵入的任何屬性值。
如果要用高級特權安裝應用程序,請使用 /jm。
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
范例
要將程序包公布給計算機的所有用戶,請鍵入:
msiexec /jm Example.msi
4.2.6 設置登錄級別
語法
msiexec /L [i][w][e][a][r][u][c][m][p][v][+][!]LogFile.txt
參數
/L
指定日志文件的路徑。
i
記錄狀態消息。
w
記錄非嚴重警告。
e
記錄所有錯誤消息。
a
記錄啟動操作。
r
記錄操作特定的記錄。
u
記錄用戶請求。
c
記錄初始用戶界面參數。
m
記錄內存不足。
p
記錄終端屬性。
v
記錄詳細輸出。要使用 v 選項,請指定 /L*v。
+
添加到現有文件。
!
刷新日志的每一行。
*
記錄除 v 選項外的所有信息。這是通配符。
LogFile .txt
文本日志文件的名稱和路徑。
備注
Windows Installer 命令行選項不區分大小寫。
要在使用通配符標志的日志文件中包括 v 選項,請在命令提示符后鍵入 /L*v。
Windows 安裝程序日志文件選項也可以與卸載和修復過程一起使用。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
示例
要安裝程序包並創建包含狀態、內存不足和錯誤消息等相關信息的日志文件,請使用下面的命令:
msiexec /i Example.msi /Lime logfile.txt
4.2.7 應用更新
語法
msiexec/pUpdatePackage
參數
/p
應用一項更新。
UpdatePackage
特定的更新。
備注
要將更新應用到管理安裝程序包,請使用下面的語法:
msiexec/pUpdatePackage/aExample.msi
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
4.2.8 使用命令行安裝轉換
語法
msiexec /iPackageTRANSFORMS=TransformList
參數
/i
安裝或配置產品。
Package
指定 Windows 安裝程序包文件。
TRANSFORMS=
用於指定哪些轉換 (.mst) 文件應該應用到程序包的屬性。
TransformList
由分號分隔的路徑列表。
備注
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
4.2.9 使用命令行通過轉換安裝並公布產品
語法
msiexec /iPackage/j[u][m] /tTransformList
參數
/i
安裝或配置產品。
Package
Windows 安裝程序包文件的名稱。
/j
公布產品。該選項忽略所有在命令行輸入的屬性值。
u
向當前用戶公布。
m
向計算機的所有用戶公布。
/t
將變換應用到已公布的程序包。
TransformList
由分號分隔的路徑列表。
備注
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
4.2.10 設置用戶界面級別
語法
msiexec /q{n|b|r|f|n+|b+|b-}
參數
/qn
不顯示用戶界面。
/qb
顯示基本用戶界面。
/qr
在安裝結束時顯示帶模式對話框的簡化用戶界面。
/qf
結束時顯示帶模式對話框的完整用戶界面。
/qn+
除了結束時顯示模式對話框之外不顯示用戶界面。
/qb+
結束時顯示帶模式對話框的基本用戶界面。
/qb-
顯示不帶模式對話框的基本用戶界面。
備注
/qb+- 不是受支持的用戶界面級別。如果用戶取消安裝,則不顯示模式對話框。
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
示例
要在安裝程序包 Example.msi 期間顯示基本用戶界面選項,請鍵入:
msiexec /qb Example.msi
4.2.11 顯示 Windows 安裝程序的版權信息
語法
msiexec {/?| /h}
參數
{ /?|/h]
顯示 Windows 安裝程序版本和版權信息。
備注
Windows Installer 命令行選項不區分大小寫。
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
4.2.12 調用系統 API DllRegisterServer 自注冊在命令行跳過的模塊
語法
msiexec /y Module
參數
/y
調用系統 API DllRegisterServer 自注冊在命令行跳過的模塊。
Module
指定模塊的文件名。
警告
編輯注冊表不當可能會嚴重損壞您的系統。在更改注冊表之前,應備份計算機上任何有價值的數據。
備注
該選項只用於不能使用 .msi 文件注冊表添加的注冊信息。
•
Windows Installer 命令行選項不區分大小寫。
•
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
范例
下例說明了如何使用 msiexec /y 命令:
msiexec /y my_file.dll
4.2.13 調用系統 API DllUnRegisterServer 取消注冊在命令行跳過的模塊
語法
msiexec/zModule
參數
/z
調用系統 API DllUnRegisterServer 取消注冊在命令行跳過的模塊。
Module
模塊文件名。
備注
該選項只用於不能使用 .msi 文件注冊表添加的注冊信息。
•
Windows Installer 命令行選項不區分大小寫。
•
有關 Windows 安裝程序命令行選項的詳細信息,請參閱“相關主題”。
范例
下例說明了如何使用 msiexec /z 命令:
msiexec /z my_file.dll
5 安裝故障分析和解決方法
5.1 安裝程序包不能正確安裝。
原因:安裝程序包已損壞。
解決方案:使用 Windows Installer 的修復選項修復安裝程序包。
另請參閱:使用命令行修復程序包
5.2 完成安裝之前安裝過程終止。
原因:Windows Installer 不能讀取安裝程序包,或者計算機上的條件阻止了程序包的成功安裝。
解決方案:Windows Installer 在 Windows 事件日志中創建項目。要查看該日志,請執行以下操作:
² 打開事件查看器。
² 查看 Windows Installer項中的應用程序日志。
5.3 升級安裝時提示“安裝程序無法安裝XX,因為已經安裝了該產品的其他版本。”
原因:安裝包的內容已經發生了變化,但其Version 屬性和UpgradeCode屬性沒有更改。
解決方案:制作新的安裝包時,請更改安裝包的Version和UpgradeCode,在使用vs.net 2003打包時,更改version的同時,UpgradeCode會自動更改。
5.4 升級安裝時部分程序組件沒有更新
原因:可能有2種
1 新的安裝包將組件安裝到不同的目錄了
2 Windows Installer認為本地文件與安裝包中的文件一致,無須更新。
解決方案:對於第一種原因,應該盡量避免,一旦發生,應該在新目錄和舊目錄同時放置新的組件,以確保組件被覆蓋。對於第二種原因,發布新版本的軟件時,對於更改過的組件,應該更改其版本(version屬性)。