Windows安装程序可以同时安装两个msi文件吗?

时间:2018-03-27 02:16:42

标签: wix windows-installer

我有一个由WIX制作的msi安装包,它会在安装后自动安装IIS Express 10.0。

<Binary Id="myCustomActionsDLL" SourceFile="$(var.CustomAction.TargetDir)CustomAction.CA.dll" />
<CustomAction Id="CheckIISExpressStatus" BinaryKey="myCustomActionsDLL" DllEntry="CheckIISExpressStatus" Execute="immediate" Return="check" Impersonate="yes"/>
<CustomAction Id="InstallIISExpress" BinaryKey="myCustomActionsDLL" DllEntry="InstallIISExpress" Execute="immediate" Return="ignore" Impersonate="yes" />
<InstallExecuteSequence>
  <Custom Action="CheckIISExpressStatus" After="InstallFinalize" Overridable="yes">NOT Installed</Custom>
  <Custom Action="InstallIISExpress" After="CheckIISExpressStatus" Overridable="yes">NOT Installed AND IS_INSTALL_IISEXPRESS="1"</Custom>
</InstallExecuteSequence>

在InstallIISExpress操作中,我调用bat来执行安装。

msiexec /i iisexpress_amd64_en-US.msi /qb 

但在执行期间,Windows Installer会提示错误:

正在安装其他程序,请等待安装完成,然后再次尝试安装该软件。

我可以设置哪些参数以允许msi同时安装两个msi?

1 个答案:

答案 0 :(得分:1)

您不得在主MSI中的自定义操作中运行其他设置。而是您应该使用WiX's Burn feature 等引导程序按顺序运行MSI文件。

已经很晚了。我试图在某一点上写下这个问题的正确解释,也许看看它是否对你有意义:Wix - How to run/install application without UI

总结一下:从MSI中的自定义操作运行旧版setup.exe文件将不可靠,并且运行MSI文件 - 无论是直接还是嵌入在setup.exe中都将无法正常工作,因为Windows Installer不允许并发MSI安装顺序。 A mutex is set when InstallExecuteSequence runs,并且在其生效时不能运行其他InstallExecuteSequence。 禁止并发MSI安装,技术上不可能