我可能有一个奇怪的要求。
我开发了一个msi来安装两个软件。在EULA之后,必须出现一个带有两个复选框的屏幕,在选择其中一个或两个复选框时,必须安装相应的软件。
我以前从未安装过一个单独的软件。
我将不得不寻找任何线索。
答案 0 :(得分:13)
将应用程序捆绑在一个MSI文件中似乎是个好主意。它看起来很直观,简单。但是,从真实世界的经验来讲,我几乎总是最终将应用程序拆分为通过自己的MSI文件进行安装。
只有在一起部署应用程序时才真正安全才能保证:
通常无法预测任何此类情况。通常,您将很快获得新的要求,例如:
错误修复:如果只有一个应用程序有错误,管理层将只想提供一个新的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 here。 One more link
纯粹的设置大小:关于单个MSI中可以包含多少组件和文件,存在一些限制。一些细节:
precompiler
, {{1} } , localization
, burn
)由于这个原因以及上面列出的其他原因,将巨大的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)可以让您这样做,但您必须自己完成所有工作。