基于 WiX 的 Windows 安装程序是否可以在其他安装程序中使用



使用 WiX 引导程序构建的安装程序通常能够在其他安装程序中运行吗?

我想创建一组可分发的文件,其中包含一个 api dll、一个安装程序,用于安装 API 使用的服务和任何先决条件文件(VC++、.NET 框架等)。此设置将由 Wix 引导程序构建到.exe文件中。然后,最终客户可以将我们的.exe设置放入他们的安装程序中,并以静默方式运行它,以安装运行我们的 API 所需的一切。

简短的回答: 你的setup.exe可以由另一个setup.exe安装,只要它不踢几个MSI文件来同时安装,并且其他setup.exe也按顺序运行,而不会一次生成多个MSI安装。技术说明如下。

从本质上讲,您可以将设置作为setup.exeMSIa merge module或上述所有内容交付。

更新 :我想检查您是否熟悉WiX包含文件?


InstallExecuteSequence 互 斥锁:由于非常基本的技术原因,两个 MSI 文件无法同时运行其实际安装操作(实际更改系统的操作)(当InstallExecuteSequenceInstallInitializeInstallFinalize之间运行时设置互斥锁)。

多个MSI GUI: 我已经多次写过这个问题,但我认为最直接的解释是来自serverfault的解释。从本质上讲,系统是锁定的,以确保在安装过程中发生错误时可以回滚所有更改。应该注意的是,您可以一次启动多个MSI文件并进入它们的GUI序列(换句话说,显示准备实际安装的设置对话框),但您一次只能启动一个进行实际的系统更改 - 用技术术语来说,这意味着运行InstallExecuteSequence

排序的MSI文件:MSI文件可以"一个接一个"运行而不会出现问题,前提是它们都经过精心设计。WiX引导程序刻录是专门为此目的而设计的(以及其他一些免费用途:下载器,引导程序,排序器,允许外部,自定义设置GUI等)。


潜在方法:您的设置似乎将作为其他软件套件安装的一部分包含在内?这里有几个选项。

  • 按顺序运行:如果其他软件供应商对此感到满意,他们可以将您的setup.exe包含在他们的中,并让它运行完成,然后再继续自己的设置。这意味着他们从自己使用WiX(Burn)创建的setup.exe或使用Advanced Installer,Installshield或其他商业工具(甚至只是dotnetInstaller - 这是一个免费的引导程序)生成的等效setup.exe执行此操作。

  • 合并模块
  • (赛门铁克文章):或者,您可以从自己的设置中创建一个">合并模块" - 这是一个可消耗的二进制"捆绑包",可以在编译/构建时合并到任何MSI设置中。它是一个小数据库片段,或者如果您愿意,也可以是一个部分数据库。它将包含设置为以适当方式安装的所有组件。从本质上讲,合并模块是作为消耗品提供的整个组件的设置,它成为其他设置的实际部分 - 无需作为单独的先决条件设置进行安装。换句话说,这是交付运行时的另一种方式,无需提供单独的设置。这是MSI最初打算部署先决条件的方式,并且基本上仍然是 - 尽管现在存在诸如Burn之类的替代方案。

    制作合并模块:高级安装程序(合并模块
    • 一般信息),WiX(也许检查IsWiX的安装程序源,它使用合并模块),Installshield(合并模块项目)。
  • MSI 文件:坦率地说,我最喜欢的方法是不要担心执行大量先决条件安装的设置.exe启动器,而是提供符合标准的MSI 文件,您的客户可以在自己的安装之前按顺序运行。如果尚未安装适当的运行时,MSI 可以设置启动条件以拒绝安装。这样,如果发现错误,您的MSI可以"自我更新",理论上它可以单独分发 - 无需重新编译捆绑合并模块的所有设置 - 安装软件第一版的任何计算机。我喜欢这种解耦。

真实世界的故事:许多人喜欢合并模块。我不得不承认我不是一个忠实的粉丝,但如果做得好,它们的效果很好。有时我被迫处理合并模块,这些模块因其令人难以置信的内置设计缺陷而破坏了完美的设置(我想到了过去的 SOAP 合并模块 - 它极大地 - 并且单枪匹马 - 提高了我的设置的错误率,必须删除)。不是合并模块本身作为一种技术的问题,而是不止一次引起问题的实际问题。

这个故事的寓意是:不要提供一个糟糕的合并模块,其中包含许多失败的自定义操作和奇怪的要求,这些要求使"父设置"膨胀,带有不必要的弱点和内容。如果您提供的合并模块符合标准,并且"最低限度"地执行其任务 - 那么这是部署运行时的好方法,甚至是某些供应商的首选。

核心操作系统运行时:我建议不要将.NET框架与您的设置捆绑在一起 - 特别是如果它是供企业使用的。Dot NET现在几乎可以通过操作系统本身始终可用,并且设置中包含的运行时很快就会过时的膨胀和"胖",企业应用程序打包人员将花费大量时间从您的软件包中摆脱出来。点网更新最好通过Windows Update(或等效的企业部署机制)进行分发。

相反,使用一页 (PDF) 文档解释(请参阅页面下方)您的应用程序需要哪些先决条件才能正常运行似乎是一种正常方法。当然,对于合并模块组件,您将记录这一点,因为您不能在自己的合并模块中包含核心运行时 - 通常您只能安装自己的文件。


一些链接(仅供参考):

  • Windows 安装程序可以同时安装两个 msi 文件吗?
  • 为什么Windows安装程序一次只能安装一个程序?
  • 其他安装 进行中 挂起我的 Wix 安装
  • Wix 自定义操作序列
  • 先决条件按钮已禁用 - MSI 安装程序
  • 如何制作自动安装应用程序所有必备程序的安装程序
  • Wix - 如何在没有UI的情况下运行/安装应用程序

最新更新