我有一个包含 2 个 MSI、一个引导程序和我的 CA 库的 wix 项目。我想运行第一个 MSI,它会提示用户安装为后续 MSI 设置的文件。根据用户在第一个 MSI 中选择的内容,我希望能够从引导程序以某种方式读取数据(从注册表、文件、属性、变量等...),以有条件地安装 sql 依赖项。
捆绑包.wxs
<MsiPackage SourceFile="$(var.PrepMsi.TargetPath)" bal:DisplayInternalUICondition="WixBundleAction = 6" Id="PrepMsi" Visible="yes" Cache="keep">
<MsiProperty Name="UI_LEVEL" Value="[WixBundleUILevel]"/>
<MsiProperty Name="MSIRESTARTMANAGERCONTROL" Value="Detect"/>
</MsiPackage>
<PackageGroupRef Id="SQL_2019_Expr"/>
<MsiPackage SourceFile="$(var.SecondMSI.TargetPath)" Id="SecondMSI" Visible="no" Cache="keep" >
<!--<MsiPackage SourceFile="$(var.SecondMSI.TargetPath)" Id="SecondMSI" bal:DisplayInternalUICondition="WixBundleAction = 6" Visible="yes" Cache="keep">-->
<MsiProperty Name="UI_LEVEL" Value="[WixBundleUILevel]"/>
<MsiProperty Name="MSIRESTARTMANAGERCONTROL" Value="Detect"/>
<MsiProperty Name="ORIGINALSOURCEFOLDER" Value="[WixBundleOriginalSourceFolder]"/>
</MsiPackage>
SQLExpr.wxs
<PackageGroup Id="SQL_2019_Expr">
<ExePackage Id="Sql2K19exe" Cache="keep" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes" Name="SQL2019-SSEI-Expr.exe"
SourceFile="..\ReqInstallers\SQL2019-SSEI-Expr.exe"
InstallArguments="/c /SkipInstallerRunCheck /QS /IACCEPTSQLSERVERLICENSETERMS /CONFIGURATIONFILE="C:\Program Files\ImagingPrepTemp\SQLConfig.ini" /InstallPath=C:\Program Files\Microsoft SQL Server\ /ADDCURRENTUSERASSQLADMIN">
<ExitCode Value="1638" Behavior="success"/>
</ExePackage>
</PackageGroup>
这必须在安装过程中发生,因为我根据用户选择安装 SQL 时有不同的场景。我尝试在 SQLExpr.wxs 中安排 util:RegistrySearch,但所有的RegistrySearchs似乎都发生在引导程序的
Planning阶段。我曾尝试将 MsiProperty 传递给 MSI,但 MSI 内的任何属性都是本地的,因此写入文件或注册表项将是(在我看来)将数据传输到 MSI 外部的唯一方法。我的问题是如何在安装过程中从引导程序读取该数据以创建 InstallCondition。
将执行视为计划期间创建的事务。交易运行时不会做出决定。它只会前进或失败并回滚。