如何根据 MSI 的自定义操作数据有条件地安装先决条件

问题描述 投票:0回答:1

我有一个包含 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=&quot;C:\Program Files\ImagingPrepTemp\SQLConfig.ini&quot; /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。

wix windows-installer bootstrapper burn
1个回答
0
投票
您尝试解决问题的方式违背了 Burn 的设计,因此不会起作用。相反,您希望自定义 BootstrapperApplication 在计划安装哪些/什么之前获取所有用户输入,然后执行它。

将执行视为计划期间创建的事务。交易运行时不会做出决定。它只会前进或失败并回滚。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.