WiX Installer中InstallCondition始终为False的问题排查
WiX Bootstrapper 版本条件安装问题排查与解决
问题描述
我有一个bootstrapper项目,希望条件安装某款前置软件。我使用以下代码在安装时读取系统中已安装软件的版本:
<Property Id="OPENTAPVERSION"> <DirectorySearch Id="OpenTapDllVersion" Path="C:\Program Files(x86)\Keysight\TestAutomation\OpenTap.dll"> <FileSearch Name="OpenTap.dll" MinVersion="9.18.4.9"/> </DirectorySearch> </Property>
随后在MsiPackage元素中进行如下配置:
<Variable Name="OpenTapVer" Value="9.18.5.0" Type="version" /> <MsiPackage Vital="yes" Visible="yes" InstallCondition="OPENTAPVERSION = OpenTapVer" SourceFile="..\..\..\output\OpAInstaller\bin\$(var.Configuration)\ITS.OpenTapWixSetup.msi" DisplayName="Install OpenTAP"/>
我的需求是仅在版本为9.15.5.0及以上时进行条件安装。我在版本比较环节是否存在错误?我尝试过不使用变量直接写"v9.18.5.0",但条件始终为False。
问题分析
你的版本比较环节存在三处关键错误:
- 逻辑与需求不匹配:当前条件
OPENTAPVERSION = OpenTapVer要求版本精确等于9.18.5.0才安装,但你需要的是版本≥9.15.5.0即可安装,逻辑完全偏离。 - DirectorySearch路径错误:你把Path直接指向了
OpenTap.dll文件,但DirectorySearch的Path必须是文件夹路径,指向文件会导致搜索失败,OPENTAPVERSION无法被赋值。 - FileSearch的MinVersion设置错误:当前设置的
MinVersion="9.18.4.9"会过滤掉9.15.5.0到9.18.4.8之间的版本,导致这部分符合你需求的版本无法触发后续判断。 - 版本格式错误:直接写
v9.18.5.0会失败,因为WiX版本比较不需要前缀v,仅支持纯数字点分格式。
修正方案
步骤1:修复文件搜索配置
把DirectorySearch的Path改为DLL所在文件夹,同时将MinVersion调整为你需求的最低版本9.15.5.0:
<Property Id="OPENTAPVERSION"> <DirectorySearch Id="OpenTapDllVersion" Path="C:\Program Files(x86)\Keysight\TestAutomation"> <FileSearch Name="OpenTap.dll" MinVersion="9.15.5.0"/> </DirectorySearch> </Property>
这样只要系统中存在版本≥9.15.5.0的OpenTap.dll,OPENTAPVERSION就会被正确赋值为该文件的版本号。
步骤2:调整安装条件逻辑
根据需求,将安装条件改为版本大于等于判断,XML中>需要转义为>:
方式1:直接写版本值
<MsiPackage Vital="yes" Visible="yes" InstallCondition="OPENTAPVERSION >= "9.15.5.0"" SourceFile="..\..\..\output\OpAInstaller\bin\$(var.Configuration)\ITS.OpenTapWixSetup.msi" DisplayName="Install OpenTAP"/>
方式2:使用变量
<Variable Name="OpenTapMinVer" Value="9.15.5.0" Type="version" /> <MsiPackage Vital="yes" Visible="yes" InstallCondition="OPENTAPVERSION >= OpenTapMinVer" SourceFile="..\..\..\output\OpAInstaller\bin\$(var.Configuration)\ITS.OpenTapWixSetup.msi" DisplayName="Install OpenTAP"/>
额外说明
如果系统中没有找到符合版本要求的OpenTap.dll,OPENTAPVERSION会是空值,此时OPENTAPVERSION >= "9.15.5.0"结果为False,不会触发安装,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Depressed Soul
相关产品推荐
相关产品推荐

