Wix布尔属性值不起作用

时间:2011-10-02 03:30:42

标签: wix windows-installer wix3.5

我有以下属性:

<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操作没有运行......

这里发生了什么?为什么这样的火箭科学?

3 个答案:

答案 0 :(得分:5)

正如其他人所提到的,Checkbox在1/0意义上不是布尔值,它们在null / not-null意义上是布尔值。

要从命令行取消设置 - 您可能希望使用类似

的内容
msiexec /i "Setup.msi" /l* UPDATEDB=""

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

答案 1 :(得分:3)

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

当复选框控件的属性设置为值(无关紧要)时,会检查复选框控件,并在其属性为空时取消选中。

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

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

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

msiexec /i "Setup.msi" /l*

答案 2 :(得分:2)

问题是 CheckBoxValue =“1”。您可以在此处找到问题的解决方案:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/How-to-conditionally-check-uncheck-a-checkbox-td5539262.html