【发布时间】:2012-07-06 16:01:41
【问题描述】:
我为我的产品创建了一个 msi,它运行良好,但我需要安装 .net 4.0 作为先决条件。我遇到了burn和bootstrapper,但有几个问题:
我应该为主 msi 和引导程序创建一个单独的项目吗?
我的客户需要一个 msi(不是 exe),那么引导程序可以是一个 msi 吗?
【问题讨论】:
标签: wix windows-installer bootstrapper
我为我的产品创建了一个 msi,它运行良好,但我需要安装 .net 4.0 作为先决条件。我遇到了burn和bootstrapper,但有几个问题:
我应该为主 msi 和引导程序创建一个单独的项目吗?
我的客户需要一个 msi(不是 exe),那么引导程序可以是一个 msi 吗?
【问题讨论】:
标签: wix windows-installer bootstrapper
引导程序项目是一个单独的项目,并生成一个 .exe 作为其输出。它是它自己的可执行文件,而 .msi 本质上是一个由 Windows Installer 处理的数据库。
【讨论】:
MSI (Windows Installer) 不支持“嵌套”安装,其中一个 .msi 包运行一段时间,然后暂停,运行单独的安装程序包,然后从它暂停的位置继续。 MSI 使用一些本质上是系统全局的 Windows 资源,因此“内部”安装优于“外部”安装。
将多次安装作为单一用户体验的方法是按顺序运行每次安装,一次一次。这就是 bootstrapper(也称为 chainer)的目的:逐个链接地运行安装链。引导程序本身不是安装包;它是一个运行一个或多个安装包的工具。
这就是引导程序不能是 .msi 的原因:它本身不是安装程序包。引导程序可以像批处理文件或脚本一样简单,也可以使用工业级工具,例如 WiX burn bundle、Flexera AdminStudio 等。
请注意,有些安装程序包以 .exe 形式提供,例如 .NET Framework 或 SQL Server 安装程序。这些本质上是自解压档案,包含一个或多个 .msi 包,转储该有效负载的临时副本,然后在其上运行 Windows Installer 服务。从某种意义上说,它们是“引导程序”加包,全部合二为一。引导程序可以运行包(和其他引导程序),但反之则不行。
您可能认为您可以让您的外包装运行一个自定义操作来启动内包装。我们都试过了......并发现它通常无法正常工作,即使您似乎在某些特定目标系统上逃脱了它。
您必须说服您的客户,Windows Installer 不会、不能按照他认为的方式工作。可悲的是,有时这样做的唯一方法就是更换客户。
【讨论】: