共用方式為


更新組件

本主題中的資訊說明使用 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 資料表中指定的新組件的強名稱進行變更

  • 如果您想要讓應用程式一律使用新版本的元件,而不會影響系統上其他應用程式所使用的元件版本,請變更 MsiAssemblyName 數據表中所指定之新元件的強名稱,並使用相同的元件來包含您用於舊元件版本的新元件版本。 在 Component 數據表中保留相同的 ComponentId。 修補應用程式之後,它只會保留新版組件的參考。 舊版本的元件可以與新版本一同保留在全域快取中。 這不會影響使用舊版元件之系統上的其他應用程式。 當相同元件使用於組件的新舊版本時,您的更新可以是較小的增量更新檔。

  • 如果新版本的元件與您要安裝應用程式的所有系統不相容,您可以將元件的新舊版本安裝為並存元件。 若要並排安裝這兩個程序集版本,請變更 MsiAssemblyName 資料表中所指定之新程序集的強名稱,並建立新的組件以包含新的程序集版本。 新元件的 Component 數據表中的 ComponentId 應該與舊版元件的 ComponentId 不同。 修補應用程式之後,它會保存對兩個元件版本的參照。 然後,應用程式可以透過宣告檔導向至元件的相容版本。 當新舊版本的組件使用不同的元件時,您的更新會使用完整的檔案替換。

  • 就地更新會覆寫全域程式集緩存中的 .NET Framework 元件複本。 這種類型的元件更新不會變更元件的強名稱。 只會變更 MsiAssemblyName 數據表之 FileVersion 欄位中的值,。 .NET Framework 程式集的即時更新需要 .NET Framework 1.1 SP1 或更新版本。

    注意

    就地更新類型會覆寫全域快取中的元件複本,而且如果新版本的元件無法完全回溯相容,則可能會中斷其他應用程式。 更新元件的建議方法是變更 MsiAssemblyName 資料表中的元件強名稱,