簡體   English   中英

Wix-MSI升級而不刪除舊版本

[英]Wix - MSI Upgrade without removing older version

我想知道是否可以使用該產品的較新版本覆蓋舊文件。 有幾百個文件,所以有更好的方法嗎? 由於升級完全清除了所有文件。 我希望升級MSI覆蓋文件。

我的升級邏輯如下:

<Upgrade Id="$(var.UpgradeCode)">
      <UpgradeVersion Minimum="$(var.ProductVersion)"
                      IncludeMinimum="no"
                      OnlyDetect="yes"                        
                      Property="NEWPRODUCTFOUND" />
      <UpgradeVersion Minimum="$(var.RTMProductVersion)"
                      IncludeMinimum="yes"
                      Maximum="$(var.ProductVersion)"
                      IncludeMaximum="no"                         
                      Property="UPGRADEFOUND" />
</Upgrade>

<CustomAction Id="PreventDowngrading" Error="Newer version already installed" />

<InstallUISequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>

<InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
  <RemoveExistingProducts After="InstallFinalize" />      
  <InstallExecute After="RemoveExistingProducts"  />
</InstallExecuteSequence>

我需要快速寫這篇文章,請耐心等待,但是這里有:

軟件包之間的組件GUID必須保持相同,以便文件正確更新,尤其是在通過修補程序進行部署時。 組件GUID不匹配的主要症狀是,在部署完成(以及永遠無法工作的補丁程序)之后,文件恰恰丟失了。

如PhilDW所述,設置適當的主要升級,並使組件GUID在各個發行版之間保持一致,並遵循組件創建規則,並且您的升級應正確工作(以及您的補丁程序)。

請注意,您可以將組件GUID保留在WiX源文件之外,並允許它們自動生成而不是硬編碼,並且您仍將獲得一致的GUID。 自動生成的GUID 會計算出一個穩定的GUID (請閱讀鏈接的問題,接受的答案及其所有注釋),在各個發行版之間保持穩定,除非您重命名或移動有問題的文件-這需要新的組件GUID, 在這里這就是原因 (這也解釋了為什么可以自動生成穩定的GUID)。 自動GUID生成將檢測何時需要新的GUID。

我不能通過heat.exe進行收獲,但是我認為它可以自動生成組件GUID,而不是硬編碼。 只需更改腳本或自動化過程即可將組件GUID設置為自動生成(在組件標簽中使用*代替GUID)。 請同時閱讀完整的答案以及所有答案和注釋: WIX中GUID的語法?

重要! 補丁程序只是用於MSI升級的一種交付方法,已經作為完整的軟件包工作。 在您確認完整,更新的MSI軟件包正確升級了以前的版本之前,不要浪費任何時間來生成補丁。 如果這樣做,您只會浪費時間-如果完整的更新不起作用,該補丁將永遠無法工作。 不行

產品的第一個版本是否已發布? 如果不是,我建議從頭開始並使用自動生成的GUID。 如果您的先前版本是實時版本,並且具有硬編碼的組件GUID,則需要將第一個版本中的現有組件GUID與更新版本中的組件GUID進行匹配,或者必須按照zett42的建議將RemoveExistingProducts放在InstallExecuteSequence中,以允許在安裝新版本之前,要完全卸載舊版本。 這將防止組件引用中的先前錯誤影響主要升級,並且升級后不應丟失任何文件。 由於組件引用不正確,因此在這種方法中根本無法進行修補 這使得次要和主要升級修補程序均失敗-都需要100%的組件引用才能正常工作。

這已經很長了。 如果這一切聽起來對您來說都是希臘文,請閱讀鏈接的stackoverflow答案,並全面了解MSI組件創建最佳實踐和組件引用。 對此也請參見MSDN。 我會再檢查一下,看看您的情況如何,一旦知道不清楚和您的位置,便可以稍微整理一下答案。

暫無
暫無

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

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