2012-02-28 84 views
8

我有一個相當大的WiX安裝程序(250 Mb以上),我正在嘗試提出一個合適的升級策略。我應該如何處理WiX安裝程序中的產品升級?

大多數在安裝程序的文件不會改變,我們不希望有分發整個包時,只有一個或兩個文件已更改。

我查看了主要和次要升級,我的理解是,如果產品ID更改,只要升級ID保持不變,並且可以使用較小的升級修補程序(如果這兩個值都保持不變一樣。

我的感覺是,使用一個補丁次升級將處理情況只有少數文件發生變化,只有重建整個安裝程序文件時相當數量的改變情況下的最佳選擇。

我一直在使用「火炬」,以產生基於兩個「wixpdb」文件之間的差異「wixmst」文件,然後建立從一個補丁測試這一點。但是,我發現我只能從一個版本修補到另一個版本(例如1.0.0到1.0.1,然後是1.0.1到1.0.2,但不是1.0.0到1.0.2)。是否有可能針對某個補丁的最低版本並支持其上的任何版本?

回答

8

修補是一個痛苦,所以在學習掌握它時準備好了很多。這是另一種可能適合你的策略。將你的MSI分成2個MSI(微軟稱之爲Micropackage)。有一個基本MSI包含預計不會更改的大部分內容,以及第二個包含您的文件的MSI要小得多,因此您希望該文件的流失率很高。

然後用刻錄是處理一起鏈接這些和卸載在一起引導程序。這與Visual Studio的功能類似。

現在你可以發佈你的第二個MSI的主要升級。

+0

我正在考慮創建單獨的MSI,所以這可能會前進。謝謝你的建議。 – 2012-02-28 15:25:49

2

我相信這是可能的,你上面描述的場景來修補,只要補丁卸載的。一個例子的情況是:

  1. 安裝MSI(V1.0)
  2. 安裝MSP(V1.0 - V1.1)
  3. 卸載MSP(回V1.0),然後安裝MSP(V1 0.0 - 1.2)

有關卸載的修補程序的詳細信息,請參閱WiX的文檔:http://wix.sourceforge.net/manual-wix3/patch_restrictions.htm 和Windows文件:http://msdn.microsoft.com/en-us/library/aa372102.aspx

注意,創建卸載的補丁也有一定的限制,你必須在維克斯3.0或更高版本。

就像克里斯托弗提到的那樣,修補可能是一種痛苦。我發現,在許多情況下,我的經理可能會要求能夠進行補丁升級,因爲他們的真正意思是讓用戶無需先進行手動安裝即可進行升級,這可以通過重大升級來完成。

也就是說,如果你有需要得到經常被下載,然後打補丁可能是值得額外的努力,許多小的更新客戶。

+0

我剛纔想到的其他東西是你必須考慮你的構建過程。管理人員可能會要求補丁,因爲他們認爲如果只有少數文件發生變化,他們不必做太多的迴歸測試。但是,如果您在每個版本中對您的dll進行版本化,並嘗試在兩個版本之間創建補丁,那麼在安裝補丁後,即使補丁大小可能很小,您也會在每個dll上看到版本更改。當管理人員和測試人員看到這一點時,他們可能會感到驚訝。 – BryanJ 2012-02-29 02:25:55

+0

感謝您的回覆。我們現在已經有了一些補丁可以使用。從長遠來看,我認爲我傾向於克里斯托弗關於創造兩個MSI的建議。 – 2012-03-01 14:49:54

0

雖然Christophers答案是真棒在他建議的WiX的引導程序,我不鼓勵做了「高流失」一攬子重大更新的途徑。問題是,在完成引導修補程序後,內部將HighChurn.msi中的易失性庫從v1.0版本升級到v1.1,但據我所知,引導程序不會重新安裝先前的版本包中的HighChurn.msi v1.0。

還有另外一條路徑:你當然可以創建針對主包發佈的補丁。鑑於你寫的內容我不完全確定,但是如果你的1.2補丁只能應用到1.1,那麼你可能只會將你的1.2與1.1分開,而不是1.0。

這裏是一個整潔的指導如何創建補丁:https://www.firegiant.com/wix/tutorial/upgrades-and-modularization/patchwork/

按照該指南,做替代的修補軟件([PatchFamily/@取代],它會讓V1.2其無效運V1.1一切,所以你基本上被迫製作v1.2補丁v1.0而不是v1.1),並且將該標誌添加到補丁元素中以定位主版本,即使存在更高版本:Patch/@MinorUpdateTargetRTM="yes"。請始終將補丁與版本安裝程序(HighChurn.msi v1.0)區分開,而不要針對您用於補丁(HighChurn.msi v1.1)的安裝程序。

還有的,你可能要需要一定的升級安裝補丁過程中的情況:一個精心策劃的補丁包/服務包方案,例如,在補丁1.1.1,需要安裝在發佈1.0的頂級服務包1.1。

關於修補您的易失性數據(我在這裏假設版本化的庫)的最後一句話:您可能需要關注在修補程序中基本上可以替換哪些庫。然後,只需將更改後的庫更新,就可以創建數據量極少的修補程序。如果您增加所有庫的版本,則所有庫都將打補丁,從而產生更大的補丁。這可能需要稍微更復雜的構建工作流程(上帝知道它爲我們做了)。

相關問題