【问题标题】:Wix Boolean Property Values Don't WorkWix 布尔属性值不起作用
【发布时间】:2011-11-29 06:43:11
【问题描述】:

我有以下属性:

<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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      安装程序属性要么设置为某个值,要么未设置。内部值只是一个字符串,所以“0”、“1”、“true”和“false”是一样的。

      复选框控件在其属性设置为一个值(无关紧要)时被选中,而在其属性为空时取消选中。

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

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

      这个命令行没有设置属性,所以没有勾选复选框:

      msiexec /i "Setup.msi" /l*
      

      【讨论】:

      • /但是UPDATEDB的默认值是1……所以如果我在命令行中不传的话,反正复选框默认是勾选的.....
      【解决方案3】:

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

      从命令行取消设置 - 你会想要使用类似的东西

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

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

      【讨论】:

      • 宾果游戏。谢谢。传入 UPDATEDB="" 就可以了。我明白为什么我的自定义操作没有运行,但不明白为什么仍然选中复选框。现在我明白任何不是“”的东西都意味着检查。
      猜你喜欢
      • 1970-01-01
      • 2019-05-30
      • 2013-01-02
      • 2015-11-26
      • 2015-08-02
      • 2013-07-22
      • 2013-08-12
      • 2013-07-03
      • 1970-01-01
      相关资源
      最近更新 更多