Wix安装多个应用程序

时间:2009-10-09 08:53:45

标签: wix

我可能有一个奇怪的要求。

我开发了一个msi来安装两个软件。在EULA之后,必须出现一个带有两个复选框的屏幕,在选择其中一个或两个复选框时,必须安装相应的软件。

我以前从未安装过一个单独的软件。

我将不得不寻找任何线索。

5 个答案:

答案 0 :(得分:13)

将应用程序捆绑在一个MSI文件中似乎是个好主意。它看起来很直观,简单。但是,从真实世界的经验来讲,我几乎总是最终将应用程序拆分为通过自己的MSI文件进行安装。

只有在一起部署应用程序时才真正安全才能保证:

  1. 最终用户始终一起使用
  2. 始终同时更新
  3. 随着时间的推移不会大幅增长
  4. 通常无法预测任何此类情况。通常,您将很快获得新的要求,例如:

    错误修复:如果只有一个应用程序有错误,管理层将只想提供一个新的MSI并保持应用程序2不受影响,而无需为这两个应用程序执行全新的QA运行安装后。这是为了降低风险并提供更小的更新,以便更快地进行测试和验证。修补非常复杂,对于没有太多语言,自定义操作或GUI构造的尽可能简单的MSI文件通常更安全。

    本地化:突然您需要以意大利语提供应用程序1,不需要翻译应用程序2。语言支持往往会大大增加设置的复杂性,更不用说它的大小了。你的“漂亮而简单”的MSI现在突然变得难以维护,并且构建起来很迟钝。如果您需要一个设置,并且您使用多种语言翻译它也是一个真正的痛苦 - 在所有语言更新都进入之前,您将无法编译RTM版本。我现在可以告诉您营销/销售在所有本地化版本准备好之前,人们都没有阻止英文版本的概念。

    QA / UAT :如果应用程序很大,提供2个独立的MSI文件可以更轻松地在不同的QA团队之间分配测试工作,并通过夜间构建等提供新的更新......

    发布时间表:突然发布应用程序的发布时间表 - 应用程序1现在每月更新一次,而应用程序2每六个月更新一次。如果不同的用户使用这些应用程序,您如何提供更新?在一个MSI中构建它并给它一个新的版本号只是为了让应用程序2用户再次安装相同的应用程序?

    内聚耦合的整体开发人员原则应用于部署包,您将省去很多麻烦。如果现在或将来的应用程序可能会占用自己的生命周期 - 立即拆分它们的部署。谁可以看到未来?

    请注意,您通常会在引导程序中包装多个MSI文件,以便用户仍然只有一个文件可以关联,即使这些产品是通过单独的MSI文件安装的。

    Wix更新:随着Wix的出现创建复杂的设置,构建可编译为多个MSI文件的Wix包含文件变得更加容易。这实际上变成了一种更灵活的合并模块。这可以简化将来分割或合并MSI文件。 See a discussion of this feature hereOne more link

    纯粹的设置大小:关于单个MSI中可以包含多少组件和文件,存在一些限制。一些细节:

    由于这个原因以及上面列出的其他原因,将巨大的MSI“分解”成几个相关的MSI会有所帮助 - 为了使维护更容易(构建和编译速度,只重建许多MSI文件中的一个等等)。 ..)。最后,您应该坚持使用每个组件的单个文件来正确地进行升级和修补。可以使用引导程序或启动程序应用程序(如Burn from WiX)或商业工具(如Installshield和Advanced Installer)中的功能按顺序安装多个MSI文件。 Here is an answer which touches on this topic。只需投入another answer which is a little bit similar


    <强> 链接

答案 1 :(得分:7)

Windows安装程序具有“功能”概念,可以选择安装或省略。如果您已经创建了一个正常工作的安装程序,那么您的WIX文件中至少有一个<Feature>元素。

只需创建多个<Feature>元素,然后使用<UIRef Id="WixUI_Mondo" /><UIRef Id="WixUI_FeatureTree" />,即可让用户选择要安装的功能。

答案 2 :(得分:3)

您无法从单个MSI安装多个应用程序。即使你想办法做到这一点,你也不应该这样做。

相反,每个应用程序都有单独的MSI,并使用引导程序来安装它们。例如。您可以使用Inno Setup生成一个自包含的bootstrapper exe,它可以安装两个MSI(以及任何先决条件)。

BTW,Wix不处理创建bootstrappers,因此您需要将其与其他工具结合使用。

答案 3 :(得分:1)

您可以执行嵌套的msi pre Windows安装程序4。

但是你不应该因为某种原因而被弃用。

替换api是调用msiembeddedui并创建一个事务处理程序。

答案 4 :(得分:-2)

您可以创建多个MSI,然后将它们捆绑到包含MSI的1中。 “父”MSI允许您选择要安装的应用程序,然后运行该MSI。

如果您真的想要2个应用程序,那么有非MSI安装程序构建器(如NSIS)可以让您这样做,但您必须自己完成所有工作。