什么直接放入Windows Installer MSI与包装器/ boostrapper?

时间:2015-07-06 10:48:57

标签: wix windows-installer installer burn

背景

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

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

先验知识

我很喜欢InnoSetup,但我刚刚开始read into Windows Installer技术。

问题

据我所知,对于任何多步骤/“复杂”的设置要求,包括先决条件和内容,仅使用一个裸MSI文件是不行的。 (正如所有不同的boostrappers的存在所证明的那样,包括与WiX捆绑的那个,Burn

因此,我需要将现有的单片设置分成几个步骤,其中一些(主要是安装我们的文件的那些)捆绑到MSI数据库中,而一些步骤只是“脚本化”的引导程序。

这里我可以使用一些关于安装程序包的先前经验:(链接)设置的哪些部分进入MSI包,哪些部分进入引导程序?

是否所有(通常可见的)UI都驻留在引导程序中,或者您是否将其中的一部分放入MSI文件中?

每个MSI文件最终应该如何“愚蠢”?也就是说,如果使用引导程序和多个MSI文件,那么任何单个MSI文件是否应包含任何可选部分,或者是否应将所有选项分解为单独的MSI文件(仅检查它们各自的先决条件是否存在,但不包含任何选项)安装它们的逻辑)?

基本上,应用程序(套件)需要支持点击式平均用户场景,其中安装程序处理所有内容,并且企业客户端需要能够分成仅包含的MSI文件我们的东西减去依赖关系,如.NET运行时,SQL Server,......将由客户的企业IT处理,我们的软件MSI将由客户IT自动部署。

那么,应该所有胶水和依赖脚本进入引导程序并只使用非常简单的MSI文件?或者某些“逻辑”应该进入(某些)MSI文件?

2 个答案:

答案 0 :(得分:1)

很难回答这个问题。使用 Burn 或类似的引导程序,并将运行时与自己的部署解决方案作为单独的文件运行 - 默认情况下以静默模式运行。

  • 对于家庭用户,您应安装所有内容,不要过多问题,以免造成混淆。
  • 对于企业部署,您应该只部署所需的内容,并明确每个包含的部署文件的用途:
    • 使用部署说明编写单页PDF ,描述每个文件的作用以及与之相关的运行时。称之为" 部署自述文件.TXT "或类似的。这是让您的应用程序获得批准进行企业部署的最佳方式。分析这个可能很麻烦。
    • 企业环境中的应用程序打包器将分析先决条件并确定您的应用程序是否能够与其标准框架包一起使用。这些标准包将被设置为分发系统的先决条件。
    • 特别需要记录 .NET framework version 以及其他运行时要求。
    • 不要自动安装 Windows修补程序 msiexec引擎更新或.NET框架运行时。将它们记录为文本文件中的先决条件。这些运行时在企业设置中受到严格控制,并由定制的企业软件包部署。
    • 您可以在MSI中包含简单运行时的合并模块,应用程序打包团队可以在公司设置中轻松删除它们。

这个答案并没有变得非常好,但我没有时间。或许也可以查看这个答案: MSI Reference Counting: Two products install the same MSIs

答案 1 :(得分:1)

简短回答:

当有多个MSI文件时,Burn引导程序处理UI是正常的,因为您确实希望看到组合进度,而不是所有单独的MSI UI。如果您真的将多个MSI打包为产品​​,则还应该在一个MSI发生故障的情况下设置多个MSI的适当回滚,因此如果一个MSI失败则需要退出。

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

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