防止修補程式需要存取原始安裝來源
無法排除修補程式應用程式可能需要存取原始安裝來源的所有情況。
請遵循下列幾點,將修補程式需要存取原始來源的可能性降到最低:
- 使用僅限整個檔案的修補程式。 這不需要為所有先前發行的檔案版本建立二進位修補程式。 請注意,整個檔案修補程式的大小通常大於二進位修補程式。 您可以在 [修補程式建立內容] (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 需要存取原始來源:
- 安裝產品範例的 RTM 版本。
- 將修補程式 Qfe1.msp 套用至電腦。 此修補程式會將 1.0 版Example.dll至 1.1 版。
- 系統會提供新的修補程式 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 開始,安裝程式會在更新檔案時選擇性地儲存檔案的基準資訊。 如需基準快取的詳細資訊,請參閱 減少修補程式大小 。