2 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個贊
大型升級失?。寒?dāng)您在“添加/刪除程序”中看到兩個條目時,大型升級失敗了(通常)。您需要修復(fù) Upgrade表的配置。請參閱下面列出的可能原因。
最小WiX標(biāo)記:默認(rèn)升級表的最小WiX標(biāo)記-具有正常參數(shù)(效果很好,請參見下面的屏幕截圖)-只是:
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
進(jìn)階:甚至可以將上述用于簡單主要升級配置的“便利元素”與舊樣式元素組合在一起,以完全控制升級表的內(nèi)容。樣品在這里。
關(guān)于主要升級:MajorUpgrade和Upgrade元素。如何使用它們:
如何避免在Windows Installer / MSI中安裝兩個版本的產(chǎn)品?
在MSI UpgradeTable中添加條目以刪除相關(guān)產(chǎn)品
可能的原因:重大升級失敗的許多可能原因的簡短摘要。
升級代碼不匹配:MSI的新舊版本之間的升級代碼可能不匹配,因此這些產(chǎn)品未標(biāo)識為相關(guān)。此后應(yīng)保留兩個版本(從未發(fā)生過卸載舊版本)。
缺少升級代碼:只需添加一下,Product元素中就有可能缺少升級代碼。通常這是一個錯誤,除非您想做一些特別奇怪的事情。
Missing MajorUpgrade元素:可能缺少整個Major Upgrade元素,并且不存在Upgrade元素。后者用于主要升級的手動配置,前者用于典型主要升級方案的“自動魔術(shù)”實(shí)施。某種“最佳實(shí)踐”。
ProductVersion:產(chǎn)品版本中的前3個數(shù)字可能沒有一個或多個(第四個字段被忽略)。
產(chǎn)品代碼:作為一個旁注,您可能會收到一條警告,指出已安裝該產(chǎn)品,這表示該產(chǎn)品代碼未更改(應(yīng)進(jìn)行重大升級)。
懸掛的版本:您的WiX標(biāo)記也可能不錯,并且懸掛的舊版本從未正確配置,如果這樣,請手動將其卸載,然后重試或嘗試使用干凈的虛擬機(jī)。如果自動生成產(chǎn)品GUID,則在主要升級設(shè)置不正確的情況下,最終可以同時安裝多個版本的產(chǎn)品。
安裝上下文:MSI文件可以按用戶或按計(jì)算機(jī)安裝。如果按用戶安裝,然后按計(jì)算機(jī)安裝,它將不會檢測到以前的版本。您的軟件包中是否有對ALLUSERS的硬編碼引用?
SecureCustomProperties:很快-我記得-在安全環(huán)境(企業(yè)環(huán)境中運(yùn)行的用戶沒有管理員權(quán)限)中,您需要將“升級”表中的ACTION屬性添加到安全屬性列表中(允許傳遞給延遲模式的屬性)。
軟件包代碼:我看到的一個非常特殊的情況是,新軟件包與舊軟件包具有相同的軟件包代碼(或現(xiàn)有的已安裝軟件包)。這是一個極端的設(shè)計(jì)錯誤,絕不會發(fā)生。始終自動生成程序包代碼,這是正確的操作方式。Windows Installer會按照定義將這兩個程序包視為相同(與實(shí)際情況相反)。
更多詳細(xì)信息:還有一些需要記住的事情:
本質(zhì)上,主要的升級是卸載舊版本并安裝新版本,并為操作發(fā)生的順序提供許多計(jì)劃選項(xiàng)(先安裝新版本,然后卸載舊版本,反之亦然)。
如上所述,您還可能在包裝盒上安裝了錯誤的較舊版本,但配置不正確,或者發(fā)生了一些X-Files廢話,導(dǎo)致升級失敗。發(fā)生。
WiX不太可能,但是InstallExecuteSequence中可能缺少標(biāo)準(zhǔn)操作RemoveExistingProducts。
WiX學(xué)習(xí)曲線:建議使用一些示例來幫助加快學(xué)習(xí)過程。唯一真正有用的東西嗎?以下是一些WiX快速入門建議。那里有示例鏈接。
最少的WiX樣本:有一個舊樣本:透明鋁。從本質(zhì)上講解了如何使用 Votive創(chuàng)建基于WiX的安裝程序。它包括一個主要的升級元素。我相信這種簡單的配置可以為您尋求的降級提供保護(hù):
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
請參閱以下升級表:
逆戟鯨
測試用例:使用透明鋁作為測試項(xiàng)目,您可以嘗試以下過程來使升級工作:
將產(chǎn)品代碼設(shè)置為*,以便為每個版本(“ <Product Id="*" ...")自動生成一個新的ProductCode 。
編譯您的MSI的第一個版本。在解決方案視圖中的WiX項(xiàng)目上單擊鼠標(biāo)右鍵,然后Visual Studio選擇Open Folder in File Explorer。進(jìn)入bin和Debug或Release。
通過在文件名的末尾添加_1重命名已編譯的MSI。例如:MySetup_1.msi
現(xiàn)在,在WiX來源中增加產(chǎn)品版本字段的前3位數(shù)字之一: <Product Id="*" ... Version="2.0.0"
編譯一個新的MSI并將其重命名:MySetup_2.msi
從版本1開始安裝MSI文件,然后再安裝第二個版本。驗(yàn)證主要升級是否成功。
進(jìn)階:這是一個演示便捷方式的高級演示,它結(jié)合使用了便利元素"MajorUpgrade"和較舊的"Upgrade"元素(可以對生成的升級表進(jìn)行更細(xì)粒度的控制)來配置主要升級:
在MSI UpgradeTable中添加條目以刪除相關(guān)產(chǎn)品
這里是僅使用較舊的Upgrade元素導(dǎo)致更多工作的示例,但完全控制了Upgrade表:Major Upgrade-“ The Old,Manual Way”。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個贊
這是正確的,這在MSI SDK文檔中有所說明(您閱讀并仍然詢問嗎?)。另外:答案也為其他人而寫-用于通用。重新表述以前寫過的內(nèi)容是一項(xiàng)練習(xí)和一項(xiàng)實(shí)驗(yàn),以查看是否可以使它變得更好。
- 2 回答
- 0 關(guān)注
- 985 瀏覽
添加回答
舉報(bào)