減少修補程式大小

從 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 檔案) 可以從完整檔案或檔案差異產生, (也稱為檔案 deltas.) 從檔案差異產生的 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 資料表的次要升級修補程式 () 包含 MsiPatchSequence 資料表的次要升級修補程式時,才會針對應用程式啟用快取。
  • 使用修補程式建立工具產生修補程式套件 ,例如Msimsp.exePATCHWIZ.DLL
  • 一律以 RTM 版本的應用程式或次要升級 (Service Pack) 版本的應用程式為目標。 Patch Creation Properties (PCP) 檔案之 TargetImages 資料表 中指定的目標應該是 ProductVersion 屬性的前三個欄位所定義的產品檢查點。
  • 永遠不要以小型更新映射為目標的修補程式。 建置修補程式的目標不應包含先前的小型更新升級映射。