使用符號減少二進位修補程式大小

針對您的目標使用公用符號和升級映射二進位檔,可減少大約一半的二進位修補程式大小。 實際縮減取決於所使用的符號。 請注意,使用符號可能會導致修補建立時間變慢,因為處理符號檔需要較長的時間。

若要使用符號來減少二進位修補程式的大小,您必須提供目標和升級映射二進位檔的符號。 在 TargetImages 資料表的 SymbolPaths 資料行和 UpgradedImages 資料表的 SymbolPaths 資料行中指定符號。 您必須使用 Visual C++ 在程式資料庫中產生符號, (PDB) 檔案格式。 較新版本的 Visual C++ 會在 PDB 檔案中提供所有必要的資訊。 舊版的 Visual C++ 也會產生偵錯 (DBG) 檔案格式。 在此情況下,SymbolsPaths 值應該同時指定 PDB 和 DBG 檔案的位置。

例如,修補程式的 TargetImage 可能是隨附于 Windows 2000 的安裝套件,且會安裝 1.1.1029.0 版 MSI.DLL。 UpgradedImage 可能是隨附于 Windows 2000 Service Pack 1 (SP1) 且安裝 1.11.1314.0 版MSI.DLL的更新安裝套件。 接著必須建立兩個修補程式建立屬性 (PCP) 檔案,其中一個具有 TargetImages 和 UpgradedImages 資料表的 SymbolPaths 資料行,其中一個資料表的 TargetImages 和 UpgradedImages 資料表都會保留 Null (空白) ,另一個則使用 TargetImages 和 UpgradedImages 資料表的 SymbolPaths 資料行填入二進位檔的符號位置。 在此情況下,在沒有使用符號的情況下產生的修補程式大小大約可以是使用符號產生的修補程式大小的三倍。

Mpatch.exe公用程式可用來測試單一檔案的二進位修補程式產生,以及檢查符號是否有效。 Mpatch.exe公用程式包含在 適用于 Windows Installer 開發人員的 Windows SDK 元件中。 Mpatch.exe的輸出會指出符號是否不相符。

例如,輸入下列命令列來檢查符號是否有效。

mpatch.exe -NEWSYMPATH:d:\update -OLDSYMPATH:d:\target d:\target\example.dll d:\update\example.dll example.pat

如果符號不在正確的位置,Mpatch.exe的輸出可能包含下列警告。

WARNING: no debug symbols for d:\update\example.dll