Wix 如何将复选框设置为";“未经检查”;从msiexec命令行?
我有一个msi(用WIX编写),它有一个绑定到自定义属性(称为MY_属性)的复选框。我想从命令行运行此msi,为此属性指定0(未选中)或1(已选中)。我的脚本将确定适当的值(基于环境),并将该值注入msiexec命令行。我的命令行如下所示:Wix 如何将复选框设置为";“未经检查”;从msiexec命令行?,wix,windows-installer,Wix,Windows Installer,我有一个msi(用WIX编写),它有一个绑定到自定义属性(称为MY_属性)的复选框。我想从命令行运行此msi,为此属性指定0(未选中)或1(已选中)。我的脚本将确定适当的值(基于环境),并将该值注入msiexec命令行。我的命令行如下所示: msiexec /i my_installer.msi MY_PROPERTY=$value 其中$value为1或0,具体取决于环境。问题是,无论我在命令行中为我的_属性提供什么值,复选框始终处于选中状态(并且该属性将始终设置为1)。取消选中复选框的唯一
msiexec /i my_installer.msi MY_PROPERTY=$value
其中$value为1或0,具体取决于环境。问题是,无论我在命令行中为我的_属性提供什么值,复选框始终处于选中状态(并且该属性将始终设置为1)。取消选中复选框的唯一方法是不指定属性(不定义属性)。应该注意,无论UI是否显示,都会发生此行为(向上述命令行添加“/quiet”不会更改此行为)
似乎表明这是windows installer中已知的“bug”(或者更准确地说,是由任何创作系统编写的msi)。建议使用构建后msi黑客作为解决方案。我想知道是否有人遇到过这个问题,并提出了更好的解决方法。谢谢
更新
我认为这个问题有三种解决办法:
我认为从命令行处理此问题的最佳方法是您已经提到的:如果您希望选中复选框,请在命令行上指定自定义道具,否则,不选中,复选框将不会被选中。正如您所发现的,当定义属性时,复选框为true(选中)(非空)而为false(未选中)当属性未定义(空白)时。听起来您需要将环境1或0字符串转换为复选框true/false,其中1或0在命令行中传递。请尝试使用设置属性自定义操作,将属性设置为
{}
(空白),条件是属性已为“0”
。在安装UI和安装执行序列中尽早安排
延迟更新:关于需要多个自定义操作来处理多个复选框的问题,您有一个选择。您可以创建多个集合属性操作(好处:很容易知道它们在做什么;成本:很多),或者您可以创建一个基于代码的自定义操作,该操作将遍历属性列表,以将属性从
0
转换为空白(好处:一个操作;成本:文档记录不完整的自定义代码)。后一种方法的第二个优点是,您可以处理不寻常的值设置,例如选中复选框时应将属性设置为0
。我担心这一点。您提出的可能是唯一/最好的选择,但现在我的包装器脚本需要能够区分“复选框”属性和普通属性。如果“复选框”属性为0,则需要保留未指定的属性,但如果“普通”属性为0,它需要使用值0.Meh来指定它。我终于看到了您的更新,并提出了一个建议,以应对对许多set property操作的需要。但是,我更喜欢@Damien的建议在调用MSI的任何情况下处理此问题。设置属性={}确实会“取消定义”属性和用于复选框和其他类型的属性。我相信它可以从命令行和set-property自定义操作中工作。我相信{}
在某种程度上特定于set-property操作,通常可能是MSI格式。在未应用格式的命令行中,可以使用PROPNAME=“”
。