簡體   English   中英

WIX MSI 安裝程序升級多個依賴產品

[英]WIX MSI installer upgrade for multiple depended products

我們有多種產品。 都可以單獨安裝,也可以同時安裝。 所有都作為單個 MSI 文件發送。 現在的問題是升級。 如果有人為一種產品獲得了新的 MSI,它必須至少適合所有其他已安裝產品的主要版本。

使用不同升級代碼的測試失敗,因為如果所有升級代碼都已安裝並且每個都有規則只允許在同一主要版本中進行更新,您可以卸載一個產品而不是安裝任何版本,因為沒有交叉檢查

閱讀文檔:

https://docs.microsoft.com/en-us/windows/win32/msi/upgradecode

UpgradeCode 屬性是代表一組相關產品的 GUID。 UpgradeCode 用於在升級表中搜索已安裝產品的相關版本。

這聽起來我們可以對所有產品使用相同的升級指南,並且安裝程序可以管理而不是檢測兩者的產品版本。

這是正確的方法嗎?

或者我們應該創建一個注冊表項“產品主要版本”並將其檢查為所有 MSI 文件的中央存儲。

樣本:

更多詳細信息.. 每個產品都是一個單獨的 MSI 文件

  • 產品A
  • 產品B
  • 產品 C

產品 A 和 B 可以單獨安裝,但如果它們在同一台計算機上,則它們的主要版本必須適合

產品 C 是專有的,這意味着它不能與 A 或 B 共存

具有相同更新指南的基本理念是

  • 產品 A.. 更新代碼 X
  • 產品 B.. 更新代碼 X
  • 產品 C.. 更新代碼 Y

在安裝 A 或 B 時進行兩次測試

  • 如果更新代碼 Y 在這里中止
  • 如果存在更新代碼 X 如果不適合或安裝或升級 A 或 B,則檢查主要版本中止

在安裝 C

  • 如果更新代碼 X 存在,則中止
  • 如果有更新代碼 Y 升級

從另一篇文章中,一個明確的解決方案似乎為每個產品提供了一個自己的密鑰,但比測試更復雜,我必須知道任何產品中的所有密鑰。 向 MSI UpgradeTable 添加條目以刪除相關產品

  • 產品 A.. 更新代碼 X
  • 產品 B.. 更新代碼 Z
  • 產品 C.. 更新代碼 Y

安裝時 A

  • 如果更新代碼 X 存在並且主要版本適合升級
  • 如果更新代碼 Z 存在並且主要版本適合升級
  • 如果更新代碼 Y 存在,則中止

安裝時 B

  • 如果更新代碼 Z 存在並且主要版本適合升級
  • 如果更新代碼 x 存在並且主要版本適合升級
  • 如果更新代碼 Y 存在,則中止

在安裝 C

  • 如果更新代碼 X 或 Z 存在,則中止
  • 如果更新代碼 Y 有升級

問候

它似乎可以使用相同的升級 id.. 在安裝日志中,我們可以看到所有相關的產品共享 GUID,由“;”分隔

Action start 15:07:46: FindRelatedProducts.
FindRelatedProducts: Found application: {E9C16B5B-DEFC-4257-B378-6BDA6724EAA3}
MSI (c) (68:D0) [15:07:46:467]: PROPERTY CHANGE: Adding PREVIOUSVERSIONSINSTALLED property. Its value is '{E9C16B5B-DEFC-4257-B378-6BDA6724EAA3}'.
FindRelatedProducts: Found application: {3C0B5AA4-2C04-4C51-9CDA-199367DD5D5B}
MSI (c) (68:D0) [15:07:46:467]: PROPERTY CHANGE: Modifying PREVIOUSVERSIONSINSTALLED property. Its current value is '{E9C16B5B-DEFC-4257-B378-6BDA6724EAA3}'. Its new value: '{E9C16B5B-DEFC-4257-B378-6BDA6724EAA3};{3C0B5AA4-2C04-4C51-9CDA-199367DD5D5B}'.
Action ended 15:07:46: FindRelatedProducts. Return value 1.

無論如何,由於共享 GUID,我必須在此處添加它以避免在安裝運行之前卸載

<InstallExecuteSequence>          
    <RemoveExistingProducts Before='InstallInitialize'>0</RemoveExistingProducts>
</InstallExecuteSequence>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM