我有一个由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?
答案 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安装,技术上不可能。