2009-10-09 150 views
3

我可能有一個奇怪的請求。Wix安裝多個應用程序

我開發了一個msi來安裝兩個軟件。在EULA之後,必須有兩個複選框,並選擇這兩個複選框中的任意一個或兩個複選框,必須安裝相應的軟件。

我曾經安裝過一個軟件,以前從來沒有兩個。

我將不得不爲任何線索。

回答

6

Windows安裝程序有一個「功能」的概念,可以選擇安裝或省略。如果您已經創建了工作安裝程序,則WIX文件中至少有一個<Feature>元素。

只需創建多個<Feature>元素,然後使用<UIRef Id="WixUI_Mondo" /><UIRef Id="WixUI_FeatureTree" />以允許用戶選擇他想要安裝的功能。

+0

您可以將1個MSI中的2個應用程序拆分爲多個功能。然而,在應用補丁時,您將永遠不會有機會更新一個功能,而不會更新一個功能,因此整個事情都會崩潰。 – 2010-06-08 10:20:29

+0

@大衛:你有這樣的「分崩離析」的例子嗎?我不立即看到任何阻塞問題。歡迎隨時關注它,我訂閱了您的Feed。 – 2010-06-08 14:20:33

+0

從安裝者的角度來看,這是一個非常糟糕的主意。功能是作爲同一個程序的一部分,而不是單獨的程序。處理多個程序安裝的方法是通過一個chainer或一個引導程序。我會把我的錢和錢箱放在一起,但那是個人的品味和經驗。 – Adkins 2011-01-07 10:22:09

13

將應用程序捆綁在一個MSI文件中看起來是個不錯的主意。它看起來很直觀,很好,很簡單。但是,從來講,真實世界的經驗我幾乎總是最終將應用程序拆分爲通過自己的MSI文件進行安裝。

它是真正安全的應用程序部署在一起的唯一的一次是當他們保證:

  1. 總是由最終用戶一起使用
  2. 總是在同一時間更新
  3. 隨着時間的推移,尺寸不會大幅增長

通常情況下,這是不可能的。通常,你會很快得到新的要求,如:

Bug修復:如果只有一個應用程序有一個bug,管理層將希望只投放一個新的MSI和離開應用2原封不動,而不需要做一個全新的QA在安裝後爲兩個應用程序運行。這是爲了降低風險並提供更小的更新,而且更快速地進行測試和驗證。修補是非常複雜的,並且通常對於MSI文件來說更安全,其儘可能簡單,沒有太多的語言,自定義動作或GUI構造。

本地化:突然之間,您得到一個要求,意大利語申請1可用,申請2不需要翻譯。語言支持往往會大大增加設置的複雜性,更不用說它的大小了。你的「漂亮而簡單」的MSI現在突然變得複雜了,難以維護,而且建設緩慢。如果你需要一個單一的設置,並且你用多種語言翻譯它,這也是一個真正的痛苦 - 你將無法編譯RTM版本,直到所有的語言更新進入。我現在可以告訴你,營銷/銷售在所有本地化版本準備就緒之前,人們都沒有阻止英文版本的概念。

QA/UAT:如果應用程序是大,提供2個獨立的MSI文件會更容易分裂不同的QA團隊之間的測試工作,並通過每晚構建等提供新的更新...

發佈時間表:應用程序的發佈時間表突然發生變化 - 應用程序1現在每個月都會更新一次,而應用程序2只會每六個月更新一次。如果不同的用戶使用這些應用程序,您如何提供更新?將它全部構建在一個MSI中,並給它一個新的版本號,讓應用程序2用戶再次安裝相同的應用程序?

應用整體開發原則凝聚力耦合到部署包,你會爲自己省下不少麻煩。如果現在或將來的應用程序可能採用自己的生命週期 - 立即拆分其部署。誰能看到未來?

請注意,您通常會將多個MSI文件包裝在引導程序中,以便用戶仍然只有一個文件可以關聯,即使產品是通過單獨的MSI文件安裝的。

Wix更新:隨着Wix創建複雜設置的出現,構建Wix包含文件變得更容易,Wix包含文件可以被編譯爲多個MSI文件。這實際上變成了一種更加靈活的合併模塊類型。這可能會簡化未來MSI文件的拆分或合併。 See a discussion of this feature here

Sheer安裝大小:對於單個MSI中可以安裝多少組件和文件有一些限制。一些細節:

這是有幫助的 「分解」 一個巨大的MSI爲幾個相關的MSI這個原因和上面列出的其他原因 - 爲了使維護更容易(構建和編譯速度,重建許多MSI文件中的一個,等等)。最後,您應該堅持使用每個組件的單個文件來使升級和修補功能正常工作。幾個MSI文件可以使用引導程序或啓動應用程序(例如從WiX進行刻錄)或商業工具(如Installshield和Advanced Installer)中的功能順序安裝。 Here is an answer which touches on this topic。只是在another answer which is a little bit similar

+0

你的意思是說Chainer,而不是bootstrapper? – Adkins 2011-01-07 10:22:37

+1

單獨的設置確實有缺點。通過單獨但非常相似的設置,您會遇到雙源問題。在不同的地方多次進行相同的更新。使用這兩個設置包含的通用代碼,當設置邏輯發生分歧時 - 使用分支。期待意想不到的情況,但只要你可以重複使用你的東西,併爲了上帝的緣故得到一個能夠分支的版本控制系統。管理有辦法以更快的速度轉變需求,而不是編寫自己難以管理的代碼。 – 2013-01-08 20:08:09

3

您無法從單個MSI安裝多個應用程序。即使你想出一個辦法來做到這一點,你真的不應該這樣做。

取而代之的是,每個應用程序都有獨立的MSI,並使用引導程序來安裝兩者。例如。您可以使用Inno Setup生成一個自包含的引導程序exe文件,它可以安裝兩個MSI(以及任何先決條件)。

順便說一句,Wix不處理創建引導程序,所以你需要將它與另一個工具結合使用。

+0

Wix現在支持[** Burn工具**]引導程序(http://wixtoolset.org/documentation/manual/v3/bundle/)。以下是Rob Mensching自己的博客:http://robmensching.com/blog/posts/2009/7/14/lets-talk-about-burn/ – 2015-05-02 12:26:51

-2

您可以創建多個MSI,然後將它們捆綁到包含MSI的1中。 「父母」MSI允許您選擇安裝哪個應用程序,然後運行該MSI。

如果你真的想要2個應用程序,那麼有非MSI安裝程序構建器(如NSIS)可以讓你這樣做,但你必須自己完成所有的工作。

+1

*並行安裝*是Windows的一個**棄用**功能安裝程序。 http://msdn.microsoft.com/en-us/library/aa368010(VS.85).aspx – 2010-06-08 14:02:33

1

你可以做嵌套MSI預Windows安裝程序4.

但你不應該無論如何,它已被廢棄的一個原因。

替換API是調用msiembeddedui並創建一個事務鏈。

相關問題