減少補丁大小
從 Windows Installer 3.0 版開始,更新作者可以使用安裝程式快取的產品基準,更加輕鬆地更新具有較小差異修補程式的應用程式。 在許多情況下,將服務資訊傳遞給應用程式的 差異修補程式,可能會明顯小於提供相同資訊的完整檔案修補程式或安裝套件。
Windows Installer 2.0:不支援。 從 Windows Installer 3.0 開始,安裝程式會在更新檔案時選擇性地儲存檔案的基準資訊。
Windows Installer 提供三種方法來更新和維護應用程式:小型更新、次要升級,以及 主要升級。 小型更新也稱為快速修正工程 (QFE) 更新,而次要升級也稱為 Service Pack (SP) 更新。 典型的主要升級會移除先前的應用程式,並安裝新的應用程式。 Windows Installer 可以將服務資訊傳遞至應用程式作為 安裝套件(.msi 檔案)或 修補程式套件(.msp 檔案)。
提供小型更新或次要升級之維護資訊的 Windows Installer 修補程式套件,通常比提供相同服務資訊的對等安裝套件要小得多。 建議將修補程式套件用於散發小型和次要升級。 建議使用安裝套件來發佈主要升級。
Windows Installer 修補程式 (.msp 檔案) 可以從完整檔案或檔案差異產生(也稱為檔案差異。)從檔案差異產生的 Windows Installer 修補程式可能比對等的完整檔案修補程式小得多。 Windows Installer 的所有版本都可以使用完整檔案更新或差異更新。
從 Windows Installer 3.0 版開始,安裝程式會在更新檔案時選擇性地儲存檔案的基準資訊。 安裝或收到次要升級時,原始基底應用程式的相關信息(RTM 版本)和最新的次要升級 (Service Pack) 會儲存在私人位置。
安裝程式會執行下列動作,以將基準快取的大小降到最低:
- 每個應用程式最多維護兩個基準:原始發行的檔案基準(RTM)和檔案在最近的次要升級(Service Pack)後的基準。
- 在修補檔案之前,不會將檔案新增至快取。 基準快取使用寫時複製技術。
- 如果應用程式從未更新過,基準快取中沒有檔案。
- 當應用程式的最後一個服務是次要升級 (Service Pack) 時,應用程式會處於基準層級,而且計算機上最多可以有兩份檔案複本。 檔案的一個復本位於安裝的目標目錄中。 另一個副本可以在 RTM 基準快取中。
- 當應用程式的最後一個服務是小型更新 (QFE) 時,應用程式不在基準層級,而且計算機上最多可以有三份檔案複本。 檔案的第一個復本位於安裝的目標目錄中。 檔案的第二個復本位於 RTM 基準快取中。 檔案的最後一個復本位於最新的基準快取中。
- 卸載產品時,會移除應用程式的基準快取。
從 Windows Installer 3.0 版開始,安裝程式可以在修補程式套用至應用程式時使用基準快取。 基準資訊可用來套用差分修補程式,或在解除安裝修補程式時將檔案還原為舊版。 這可以讓補丁作者受益於更小的差異補丁。 如果安裝程式發現差異修補程式無法套用至目標檔案,安裝程式就可以嘗試使用儲存在基準快取中的檔案作為起點。 安裝程式只有在嘗試快取中的所有可能性之後,才要求原始安裝來源。
遵循下列指導方針可協助修補程式作者使用 Windows Installer 3.0 版本的修補程式和基準快取,來建立較小的增量修補程式:
- 編寫包含 MsiPatchSequence 資料表的修補程式。 此數據表必須使用基準快取,且從 Windows Installer 3.0 版開始可供使用。
- 請勿設定防止基準快取的原則。 MaxPatchCacheSize 原則的值會指定可使用的磁碟空間百分比上限。 如果 MaxPatchCacheSize 原則設定為 0,則不會將其他檔案儲存在基準快取中。 如果未設定原則,預設值是可以使用最多 10 個% 的磁碟空間。 如果快取的大小總計達到磁碟空間的百分比上限,則不會儲存其他檔案。 此原則不會影響已儲存的檔案。 即使快取已停用,安裝程式也可以使用現有的產品基準快取。
- 如果套用的第一個修補程式包含 MsiPatchSequence 數據表,則會為應用程式啟用快取。
- 如果服務交易中的任何修補程式不包含 MsiPatchSequence 數據表,則只有在包含 MsiPatchSequence 數據表的次要升級修補程式 (Service Pack) 成功套用至產品時,才會為應用程式啟用快取。
- 使用修補程式建立工具來產生修補程式套件,例如 Msimsp.exe 和 PATCHWIZ.DLL。
- 一律以 RTM 版本的應用程式或應用程式的次要升級 (Service Pack) 版本為目標修補程式。 修補程式建立屬性 (PCP) 檔案 TargetImages 數據表中指定的目標,應該是 ProductVersion 屬性的前三個字段所定義的產品檢查點。
- 絕對不要將修補程式針對小型更新映像。 建置修補程序的目標不應包含先前的小型更新升級映像。