将什么直接放入 Windows Installer MSI 与 wrapper/boostrapper?

What to put into a Windows Installer MSI directly vs. a wrapper/boostrapper?

背景

我目前正在将现有的非 MSI 设置迁移到 Windows 基于安装程序的解决方案。当前的解决方案是用 InnoSetup 编写的,我非常喜欢它,但是,客户 IT 部门开始需要 MSI,并且在他们这样做的情况下,通常情况下 many/some 的先决条件和我们包含在 setup.exe 中的脚本不需要它们的自动化任务(但是,有些是)。

因此,纯 MSI 包装器在这里似乎没有太大意义,所以我正在查看(多个?)MSI 文件和一个 boostrapper。

先验知识

我很擅长 InnoSetup,但我才刚刚开始 read into Windows 安装程序技术。

问题

据我所知,对于任何多步骤/"complicated" 设置要求(包括先决条件和内容),仅使用裸 MSI 文件是不行的。 (所有不同的 boostrappers 的存在都证明了这一点,包括与 WiX 捆绑在一起的那个,Burn

因此,我需要将我们现有的整体设置分成几个步骤,其中一些(主要是那些安装 我们的 文件的步骤)捆绑到 MSI 数据库和一些步骤仅 "scripted" 在引导程序中。

这里是我真正可以使用有关安装程序包的一些先前经验的地方:(链接的)安装程序的哪些部分进入 MSI 程序包,哪些部分进入引导程序?

所有(通常可见的)UI 应该驻留在引导程序中还是将其中一些放入 MSI 文件中?

每个 MSI 文件最终应该如何 "dumb"?也就是说,如果无论如何都使用引导程序和多个 MSI 文件,任何单独的 MSI 文件是否应该包含任何可选部分,或者所有选项是否应该被分解到单独的 MSI 文件中(只检查它们各自的先决条件是否存在,但不包含安装它们的逻辑)?


基本上,应用程序(套件)需要支持点击率一般的用户场景,其中设置处理一切,对于企业客户,需要能够拆分为MSI 文件只包含我们的东西减去依赖项,如 .NET 运行时,SQL 服务器,...将由客户的公司 IT 处理,我们的软件 MSI 将由客户 IT 自动部署。

那么,所有胶水和依赖脚本是否应该进入引导程序并且只使用非常简单的 MSI 文件?或者应该将某些 "logic" 放入(某些)MSI 文件中?

很难简短地回答这个问题。请使用 Burn 或类似的引导程序,并将 运行times 与他们自己的部署解决方案作为单独的文件留给 运行 - 和 运行 静默默认模式。

  • 对于家庭用户,您应该安装所有东西,不要问太多问题,以免造成混淆。
  • 对于企业部署,您应该只部署需要的内容,并明确每个包含的部署文件的用途:
    • 写一个 一页 PDF,其中包含部署说明,描述每个文件的作用以及它所涉及的运行时间。将其命名为“DEPLOYMENT README.TXT”或类似名称。这是让您的应用程序获准用于企业部署的最佳方式。分析这个可能会很累。
    • 企业环境中的应用程序打包程序将分析先决条件并确定您的应用程序是否可以与他们的标准框架包一起很好地工作。这些标准包将被设置为分发系统中的先决条件。
    • 详细记录需要什么 .NET 框架版本 和其他 运行时间要求。
    • 不要自动安装 windows 修补程序msiexec 引擎更新 或 .NET 框架 运行 次.将它们记录为文本文件中的先决条件。这些 运行时间在企业设置中受到严格控制,它们由定制的企业包部署。
    • 您可以在 MSI 中包含 运行 次简单的合并模块,应用程序打包团队可以在公司设置中轻松删除它们。

这个答案不是很好,但我没时间了。也许也检查这个答案: MSI Reference Counting: Two products install the same MSIs

简短的回答:

当有多个 MSI 文件时,UI 由 Burn 引导程序处理是正常的,因为您确实希望看到合并的进度,而不是所有单独的 MSI UI。如果您确实将多个 MSI 打包为一个产品,您还应该设置多个 MSI 的适当回滚,以防其中一个失败,这样如果一个失败,它们都需要退出。

引导程序包含确定需要安装什么的检测逻辑,可以安装 SQL、NET 等先决条件,但不得以其他方式更改系统。

MSI 文件包含适用于正在安装的文件的所有文件、服务安装、COM 注册等。您使用的任何更改系统的自定义操作代码都必须在执行序列中,被推迟,并且具有相应的回滚 CA 以撤消它所做的任何事情。 MSI 应该能够 运行 独立地安装其内容 - 我发现这是一个有用的指南。 MSI 文件将在没有 UI 的情况下安装,因此请确保它们可以通过在命令行上作为 属性 值传递的参数静默安装,包括安装位置。