亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WIX不會卸載舊版本

WIX不會卸載舊版本

心有法竹 2020-02-02 15:16:22
經過一番谷歌搜索后,我想到了一個配置,該配置應允許我僅安裝軟件包的較新版本(確實如此),而替換已安裝的較舊版本(卻沒有)。我的wxs文件如下:<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">    <Product Id="*"             Name="Gdml File Viewer" Language="1033"             UpgradeCode="5fb07c15-32a5-4b8a-9794-e4425bfc2eea"             ...>        <Package InstallerVersion="200"                 Compressed="yes"                 InstallScope="perMachine" Platform="x64" />        <MajorUpgrade Schedule="afterInstallValidate"                      DowngradeErrorMessage="A later version of [ProductName] is already installed"                 AllowSameVersionUpgrades="no"                 AllowDowngrades="no" />...正如預期的那樣,它確實允許我安裝較新的版本,但未卸載較舊的版本。它仍然顯示在“應用和功能”列表中:
查看完整描述

2 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

大型升級失?。寒斈凇疤砑?刪除程序”中看到兩個條目時,大型升級失敗了(通常)。您需要修復 Upgrade表的配置。請參閱下面列出的可能原因。


最小WiX標記:默認升級表的最小WiX標記-具有正常參數(效果很好,請參見下面的屏幕截圖)-只是:


<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

進階:甚至可以將上述用于簡單主要升級配置的“便利元素”與舊樣式元素組合在一起,以完全控制升級表的內容。樣品在這里。


關于主要升級:MajorUpgrade和Upgrade元素。如何使用它們:


如何避免在Windows Installer / MSI中安裝兩個版本的產品?

在MSI UpgradeTable中添加條目以刪除相關產品

可能的原因:重大升級失敗的許多可能原因的簡短摘要。


升級代碼不匹配:MSI的新舊版本之間的升級代碼可能不匹配,因此這些產品未標識為相關。此后應保留兩個版本(從未發生過卸載舊版本)。


缺少升級代碼:只需添加一下,Product元素中就有可能缺少升級代碼。通常這是一個錯誤,除非您想做一些特別奇怪的事情。


Missing MajorUpgrade元素:可能缺少整個Major Upgrade元素,并且不存在Upgrade元素。后者用于主要升級的手動配置,前者用于典型主要升級方案的“自動魔術”實施。某種“最佳實踐”。


ProductVersion:產品版本中的前3個數字可能沒有一個或多個(第四個字段被忽略)。


產品代碼:作為一個旁注,您可能會收到一條警告,指出已安裝該產品,這表示該產品代碼未更改(應進行重大升級)。


懸掛的版本:您的WiX標記也可能不錯,并且懸掛的舊版本從未正確配置,如果這樣,請手動將其卸載,然后重試或嘗試使用干凈的虛擬機。如果自動生成產品GUID,則在主要升級設置不正確的情況下,最終可以同時安裝多個版本的產品。


安裝上下文:MSI文件可以按用戶或按計算機安裝。如果按用戶安裝,然后按計算機安裝,它將不會檢測到以前的版本。您的軟件包中是否有對ALLUSERS的硬編碼引用?


SecureCustomProperties:很快-我記得-在安全環境(企業環境中運行的用戶沒有管理員權限)中,您需要將“升級”表中的ACTION屬性添加到安全屬性列表中(允許傳遞給延遲模式的屬性)。


軟件包代碼:我看到的一個非常特殊的情況是,新軟件包與舊軟件包具有相同的軟件包代碼(或現有的已安裝軟件包)。這是一個極端的設計錯誤,絕不會發生。始終自動生成程序包代碼,這是正確的操作方式。Windows Installer會按照定義將這兩個程序包視為相同(與實際情況相反)。


更多詳細信息:還有一些需要記住的事情:


本質上,主要的升級是卸載舊版本并安裝新版本,并為操作發生的順序提供許多計劃選項(先安裝新版本,然后卸載舊版本,反之亦然)。


如上所述,您還可能在包裝盒上安裝了錯誤的較舊版本,但配置不正確,或者發生了一些X-Files廢話,導致升級失敗。發生。


WiX不太可能,但是InstallExecuteSequence中可能缺少標準操作RemoveExistingProducts。


WiX學習曲線:建議使用一些示例來幫助加快學習過程。唯一真正有用的東西嗎?以下是一些WiX快速入門建議。那里有示例鏈接。


最少的WiX樣本:有一個舊樣本:透明鋁。從本質上講解了如何使用 Votive創建基于WiX的安裝程序。它包括一個主要的升級元素。我相信這種簡單的配置可以為您尋求的降級提供保護:


<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

請參閱以下升級表:


逆戟鯨


測試用例:使用透明鋁作為測試項目,您可以嘗試以下過程來使升級工作:


將產品代碼設置為*,以便為每個版本(“ <Product Id="*" ...")自動生成一個新的ProductCode 。

編譯您的MSI的第一個版本。在解決方案視圖中的WiX項目上單擊鼠標右鍵,然后Visual Studio選擇Open Folder in File Explorer。進入bin和Debug或Release。

通過在文件名的末尾添加_1重命名已編譯的MSI。例如:MySetup_1.msi

現在,在WiX來源中增加產品版本字段的前3位數字之一: <Product Id="*" ... Version="2.0.0"

編譯一個新的MSI并將其重命名:MySetup_2.msi

從版本1開始安裝MSI文件,然后再安裝第二個版本。驗證主要升級是否成功。

進階:這是一個演示便捷方式的高級演示,它結合使用了便利元素"MajorUpgrade"和較舊的"Upgrade"元素(可以對生成的升級表進行更細粒度的控制)來配置主要升級:


在MSI UpgradeTable中添加條目以刪除相關產品


這里是僅使用較舊的Upgrade元素導致更多工作的示例,但完全控制了Upgrade表:Major Upgrade-“ The Old,Manual Way”。


查看完整回答
反對 回復 2020-02-02
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

這是正確的,這在MSI SDK文檔中有所說明(您閱讀并仍然詢問嗎?)。另外:答案也為其他人而寫-用于通用。重新表述以前寫過的內容是一項練習和一項實驗,以查看是否可以使它變得更好。

查看完整回答
反對 回復 2020-02-02
  • 2 回答
  • 0 關注
  • 988 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號