共用方式為


避免修補程式需要存取原始安裝來源

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

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

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

修補時的來源需求

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

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

  • 修補程式適用於具有遺失或損毀檔案的元件。

  • 修補程式會套用至元件中的檔案,該元件中也包含沒有 MsiFileHash 專案的未版本檔案。 需要填入 MsiFileHash 數據表,以避免從來源位置不必要地重新複製未轉換的檔案。

  • 修補程式已套用的REINSTALLMODE為“amus”或“emus”。 此選項很危險,因為它會執行檔案複製作業,而不論檔案版本為何。 這可能會導致檔案的降級,而且幾乎一律需要來源。 建議的 REINSTALLMODE 值為 omus。

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

  • 此封裝已撰寫為呼叫 ResolveSource Action。 此動作通常應該避免或有條件化,因為它的執行一律會導致來源的存取。

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

    注意

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

     

  • 修補程式套件是由不適用於計算機上檔案目前版本的二進位修補程式所組成。

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

  1. 安裝產品範例的 RTM 版本。
  2. 將修補程式 Qfe1.msp 套用至電腦。 此修補程式會將 Example.dll 1.0 版的 1.0 版更新為 1.1 版。
  3. 會提供新的修補程式 Qfe2.msp,以將 Example.dll 更新至 1.2 版,並使 Qfe1.msp 作廢。 不過,此修補程式專為 Example.dll 的 1.0 版而設計,因為它是透過產品的 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 開始,安裝程式會在更新檔案時選擇性地儲存檔案的基準資訊。 如需基準快取的詳細資訊,請參閱 減少修補程式大小