更新組件
本主題中的資訊說明使用 Windows Installer 修補程式更新組件的建議指引。
元件更新的作者可以使用下列指導方針,這些指導方針適用於所有類型的元件:
- 更新元件的建議方法是變更 MsiAssemblyName 資料表中的元件強名稱,。 新的組件版本可以由新的組件提供,或者由提供舊版的相同組件提供。
- 如果相同的元件提供新的元件版本,請勿將元件類型從 .NET Framework 元件變更為 Win32 元件,反之亦然。
- 如果系統上的所有應用程式都必須使用更新的元件,您應該部署原則元件。 策略元件可以將系統上的應用程式重新導向,以便使用新的元件版本。 建立新的元件應該用來提供政策集合。
- 需要 Windows Installer 3.0 或更新版本才能卸載元件更新。 如需詳細資訊,請參閱 移除修補程式。
- 較新版本的元件應該包含先前發行之元件的相同或更高版本的檔案。
- Windows Installer 3.0 可以透過完整檔案替換或較小的差異更新來維護 .NET Framework 和 Win32 元件。 如需詳細資訊,請參閱 減少補丁大小。
- 如果您的更新變更了元件的強名稱,且修補程式套件沒有 MsiPatchSequence 資料表,則需要 MsiPatchOldAssemblyFile 資料表和 MsiPatchOldAssemblyName 資料表。 如果修補程式套件在 MsiPatchSequence 數據表中有修補程式排序資訊,則不需要 MsiPatchOldAssemblyFile 數據表和 MsiPatchOldAssemblyName 數據表。
- 發行新的修補程式之前,請先套用所有先前發行的修補程式,以測試修補程式。
更新 Win32 程序集
當您更新 Win32 元件時,請使用下列指導方針:
- 變更在 MsiAssemblyName 資料表中指定的新元件的強名稱。
- 如果您想要讓應用程式一律使用新版本的元件,而不會影響系統上其他應用程式所使用的元件版本,請使用相同的元件來包含您用於舊元件版本的新元件版本。 在 Component 數據表中保留相同的 ComponentId。 在修補應用程式後,它只會保留新版組件的參照。 舊版的組件可以與新版共存於全域組件快取中。 這不會影響使用舊版元件之系統上的其他應用程式。 當相同組件同時用於組件的新舊版本時,您的更新可以是較小的差異修補程式。
- 如果新版本的元件與您要安裝應用程式的所有系統不相容,您可以將元件的新舊版本安裝為並存元件。 若要並存安裝這兩個組件版本,請建立新的元件以包含新的組件版本。 新元件的 Component 數據表中的 ComponentId 應該與舊版元件的 ComponentId 不同。 修補應用程式之後,它會保留對兩個元件版本的參考。 然後,應用程式可以透過清單指向元件的相容版本。 當組件的新舊版本使用不同的元件時,您更新會使用完整的檔案替換。
更新 .NET Framework 組件
當您更新 .NET Framework 元件時,請使用下列指導方針。
如果您想要讓應用程式一律使用新版本的元件,而不會影響系統上其他應用程式所使用的元件版本,請變更 MsiAssemblyName 數據表中所指定之新元件的強名稱,並使用相同的元件來包含您用於舊元件版本的新元件版本。 在 Component 數據表中保留相同的 ComponentId。 修補應用程式之後,它只會保留新版組件的參考。 舊版本的元件可以與新版本一同保留在全域快取中。 這不會影響使用舊版元件之系統上的其他應用程式。 當相同元件使用於組件的新舊版本時,您的更新可以是較小的增量更新檔。
如果新版本的元件與您要安裝應用程式的所有系統不相容,您可以將元件的新舊版本安裝為並存元件。 若要並排安裝這兩個程序集版本,請變更 MsiAssemblyName 資料表中所指定之新程序集的強名稱,並建立新的組件以包含新的程序集版本。 新元件的 Component 數據表中的 ComponentId 應該與舊版元件的 ComponentId 不同。 修補應用程式之後,它會保存對兩個元件版本的參照。 然後,應用程式可以透過宣告檔導向至元件的相容版本。 當新舊版本的組件使用不同的元件時,您的更新會使用完整的檔案替換。
就地更新會覆寫全域程式集緩存中的 .NET Framework 元件複本。 這種類型的元件更新不會變更元件的強名稱。 只會變更 MsiAssemblyName 數據表之 FileVersion 欄位中的值,。 .NET Framework 程式集的即時更新需要 .NET Framework 1.1 SP1 或更新版本。
注意
就地更新類型會覆寫全域快取中的元件複本,而且如果新版本的元件無法完全回溯相容,則可能會中斷其他應用程式。 更新元件的建議方法是變更 MsiAssemblyName 資料表中的元件強名稱,。