Share via


防止修補程式需要存取原始安裝來源

無法排除修補程式應用程式可能需要存取原始安裝來源的所有情況。

請遵循下列幾點,將修補程式需要存取原始來源的可能性降到最低:

  • 使用僅限整個檔案的修補程式。 這不需要為所有先前發行的檔案版本建立二進位修補程式。 請注意,整個檔案修補程式的大小通常大於二進位修補程式。 您可以在 [修補程式建立內容] (PCP) 檔案中,撰寫值為 1 (一個) 的 IncludeWholeFilesOnly 屬性,輕鬆地將修補程式設定為整個檔案修補程式。
  • 請確定沒有任何自訂動作存取原始來源位置。
  • 請確定 ResolveSource 動作已設定條件化,使其只在需要時執行,或者完全不存在。
  • 針對所有未轉換的檔案填入 MsiFileHash 資料表 。 Windows Installer SDK 工具Msifiler.exe,可以輕鬆地為您執行這項操作。
  • 確定所有檔案都有正確的版本和語言資訊。 Windows Installer SDK 工具Msifiler.exe,可以輕鬆地為您執行這項操作。

修補時的來源需求

可能需要存取原始安裝來源,才能在下列情況下套用修補程式:

  • 修補程式適用于目前從來源執行的功能。 在此情況下,此功能會從執行來源狀態轉換為本機狀態。

  • 修補程式會套用至具有遺失或損毀檔案的元件。

  • 修補程式會套用至元件中的檔案,該元件也包含沒有 MsiFileHash 專案的未反轉檔案。 需要填入 的 MsiFileHash 資料表 ,以防止從來源位置重新複製未轉換的檔案。

  • 修補程式已套用至 Amus 或 emus 的 REINSTALLMODE。 不論檔案版本為何,這個選項都會執行檔案複製作業,這很危險。 這可能會導致檔案向下撤銷,而且幾乎一律需要來源。 建議的 REINSTALLMODE 值為 omus。

  • 遺漏產品的快取套件。 需要快取的套件,才能套用修補程式。 快取的套件會儲存在 %windir%\Installer 資料夾中。

  • 此套件是撰寫來呼叫 ResolveSource 動作。 此動作通常應該避免或適當地設定條件化,因為其執行一律會導致存取來源。

  • 封裝具有自訂動作,會嘗試以某種方式存取來源。 最常見的範例是類型 23 並行安裝自訂動作。

    注意

    不建議針對要發行至公用的應用程式安裝並行安裝。 如需並行安裝的相關資訊,請參閱 並行安裝

     

  • 修補程式套件包含不適用於電腦上檔案目前版本的二進位修補程式。

在套用修補程式時,請考慮下列範例,其中 Windows Installer 需要存取原始來源:

  1. 安裝產品範例的 RTM 版本。
  2. 將修補程式 Qfe1.msp 套用至電腦。 此修補程式會將 1.0 版Example.dll至 1.1 版。
  3. 系統會提供新的修補程式 Qfe2.msp,其會將Example.dll更新為 1.2 版,並將 Qfe1.msp 過時。 不過,修補程式只會建立為以 1.0 版Example.dll為目標,因為它是使用產品的 RTM 版本產生。 Example.dll 1.2 版包含Example.dll 1.1 版中包含的修正程式,但 .msp 檔案是在 RTM 和 QFE2 映射之間產生。 因此,當 Qfe2.msp 套用至電腦時,Windows Installer 必須存取原始來源。 Example.dll的二進位修補程式無法套用至 1.1 版;它只能套用至 1.0 版。 這會導致安裝程式從原始來源位置重新複製 1.0 版Example.dll,以便成功套用修補程式。

移除修補程式時的來源需求

如果 Windows Installer 尚未儲存修補程式的基準資訊,可能需要存取原始安裝來源,才能移除修補程式。 從 Windows Installer 3.0 開始,安裝程式會在更新檔案時選擇性地儲存檔案的基準資訊。 如需基準快取的詳細資訊,請參閱 減少修補程式大小