Wix 布尔属性值不起作用

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

我有以下财产:

<Property Id="UPDATEDB">1</Property>

UI 中绑定到该属性的复选框:

<Control Id="updateDatabase" Type="CheckBox" CheckBoxValue="1" Height="15" Width="95" X="20" Y="74" Text="Update Database" Property="UPDATEDB" />

还有一个自定义操作,它根据此属性的值执行某些操作

<CustomAction Id="RunDbMigration" Directory="INSTALLDIR" Return="check"
          ExeCommand='[DBMIGRATIONDIR]\DbMigration.exe' />

<InstallExecuteSequence>
  <Custom Action="RunDbMigration" After="InstallFinalize">UPDATEDB=1 AND NOT Installed</Custom>
</InstallExecuteSequence>

如果我尝试从命令行为 UPDATEDB 传递 0 值:

msiexec /i "Setup.msi" /l* UPDATEDB=0

msiexec /i "Setup.msi" /l* UPDATEDB="0"

无论如何,复选框的值都会被选中。也就是说,传入的 0 似乎受到尊重,并且 RunDbMigration 操作未运行...

这是怎么回事?为什么这是如此火箭科学?

wix windows-installer wix3.5
3个回答
6
投票

正如其他人提到的,复选框不是 1/0 意义上的布尔值,而是 null/not-null 意义上的布尔值。

要从命令行取消设置 - 您需要使用类似的东西

msiexec /i "Setup.msi" /l* UPDATEDB=""

您的条件很可能在执行自定义操作之前专门查找 1 的值,这就是您的 CA 未运行的原因。


3
投票

安装程序属性要么设置为一个值,要么不设置。在内部,该值只是一个字符串,因此“0”、“1”、“true”和“false”是相同的。

当复选框控件的属性设置为某个值(无关紧要)时,复选框控件将被选中;当其属性为空时,复选框控件将被取消选中。

此命令行设置属性并选中复选框:

msiexec /i "Setup.msi" /l* UPDATEDB="0"

此命令行不设置属性,因此未选中该复选框:

msiexec /i "Setup.msi" /l*

2
投票

问题是 CheckBoxValue="1"。您可以在这里找到问题的解决方案:https://wix-users.narkive.com/HOW67H18/how-to-conditionally-check-uncheck-a-checkbox

© www.soinside.com 2019 - 2024. All rights reserved.