我可能有一个奇怪的请求。Wix安装多个应用程序
我开发了一个msi来安装两个软件。在EULA之后,必须有两个复选框,并选择这两个复选框中的任意一个或两个复选框,必须安装相应的软件。
我曾经安装过一个软件,以前从来没有两个。
我将不得不为任何线索。
我可能有一个奇怪的请求。Wix安装多个应用程序
我开发了一个msi来安装两个软件。在EULA之后,必须有两个复选框,并选择这两个复选框中的任意一个或两个复选框,必须安装相应的软件。
我曾经安装过一个软件,以前从来没有两个。
我将不得不为任何线索。
Windows安装程序有一个“功能”的概念,可以选择安装或省略。如果您已经创建了工作安装程序,则WIX文件中至少有一个<Feature>
元素。
只需创建多个<Feature>
元素,然后使用<UIRef Id="WixUI_Mondo" />
或<UIRef Id="WixUI_FeatureTree" />
以允许用户选择他想要安装的功能。
将应用程序捆绑在一个MSI文件中看起来是个不错的主意。它看起来很直观,很好,很简单。但是,从来讲,真实世界的经验我几乎总是最终将应用程序拆分为通过自己的MSI文件进行安装。
它是真正安全的应用程序部署在一起的唯一的一次是当他们保证:
通常情况下,这是不可能的。通常,你会很快得到新的要求,如:
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。
你的意思是说Chainer,而不是bootstrapper? – Adkins 2011-01-07 10:22:37
单独的设置确实有缺点。通过单独但非常相似的设置,您会遇到双源问题。在不同的地方多次进行相同的更新。使用这两个设置包含的通用代码,当设置逻辑发生分歧时 - 使用分支。期待意想不到的情况,但只要你可以重复使用你的东西,并为了上帝的缘故得到一个能够分支的版本控制系统。管理有办法以更快的速度转变需求,而不是编写自己难以管理的代码。 – 2013-01-08 20:08:09
您无法从单个MSI安装多个应用程序。即使你想出一个办法来做到这一点,你真的不应该这样做。
取而代之的是,每个应用程序都有独立的MSI,并使用引导程序来安装两者。例如。您可以使用Inno Setup生成一个自包含的引导程序exe文件,它可以安装两个MSI(以及任何先决条件)。
顺便说一句,Wix不处理创建引导程序,所以你需要将它与另一个工具结合使用。
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
您可以创建多个MSI,然后将它们捆绑到包含MSI的1中。 “父母”MSI允许您选择安装哪个应用程序,然后运行该MSI。
如果你真的想要2个应用程序,那么有非MSI安装程序构建器(如NSIS)可以让你这样做,但你必须自己完成所有的工作。
*并行安装*是Windows的一个**弃用**功能安装程序。 http://msdn.microsoft.com/en-us/library/aa368010(VS.85).aspx – 2010-06-08 14:02:33
你可以做嵌套MSI预Windows安装程序4.
但你不应该无论如何,它已被废弃的一个原因。
替换API是调用msiembeddedui并创建一个事务链。
您可以将1个MSI中的2个应用程序拆分为多个功能。然而,在应用补丁时,您将永远不会有机会更新一个功能,而不会更新一个功能,因此整个事情都会崩溃。 – 2010-06-08 10:20:29
@大卫:你有这样的“分崩离析”的例子吗?我不立即看到任何阻塞问题。欢迎随时关注它,我订阅了您的Feed。 – 2010-06-08 14:20:33
从安装者的角度来看,这是一个非常糟糕的主意。功能是作为同一个程序的一部分,而不是单独的程序。处理多个程序安装的方法是通过一个chainer或一个引导程序。我会把我的钱和钱箱放在一起,但那是个人的品味和经验。 – Adkins 2011-01-07 10:22:09