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