我目前正在尝试将现有的非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文件?
答案 0 :(得分:1)
很难回答这个问题。使用 Burn 或类似的引导程序,并将运行时与自己的部署解决方案作为单独的文件运行 - 默认情况下以静默模式运行。
这个答案并没有变得非常好,但我没有时间。或许也可以查看这个答案: 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文件,因此请确保可以使用在命令行上作为属性值传递的参数(包括安装位置)以静默方式安装它们。