我们一直在使用wix UI扩展库中的CustomizeDlg进行功能选择对话框,但是出现了一项新要求,该要求规定如果正在更新软件,则应禁用浏览按钮。
所以我从库中复制了对话框wxs文件以便自定义它,更改代码如下
<Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="115" Property="_BrowseProperty" Sunken="yes" TabSkip="no" Text="!(loc.CustomizeDlgTree)" />
<Control Id="Browse" Type="PushButton" X="294" Y="210" Width="66" Height="17" Text="!(loc.CustomizeDlgBrowse)">
<Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
<Condition Action="hide">Installed</Condition>
<Condition Action="disable">UPGRADE = 1</Condition>
</Control>
问题是浏览按钮永远不会被禁用,有人可以指出我在这里做错了吗?
非常感谢答案 0 :(得分:0)
根据Windows Installer Property Reference,根本没有UPGRADE
属性。要验证这是否是问题,请使用命令行中的日志记录选项运行安装程序,如下所示:
msiexec /lvx* logfile.txt /i myinstaller.msi
日志文件将显示升级期间使用的所有属性的值。
您正在寻找的条件可能是
<Condition Action="disable">UPGRADINGPRODUCTCODE</Condition>
但我还没有测试过。
答案 1 :(得分:0)
如果要为要安装的Feature元素设置ConfigurableProperty属性,则似乎会阻止修改Browse按钮的状态(或者可能是与SelectionBrowse事件关联的任何控件)。您可以在看似安装后修改状态,这就是为什么如果您尝试更改/删除该功能,隐藏操作将起作用。我没有找到解决办法;我不确定这是Windows Installer构造还是WiX中的错误。我现在正在假设前者。
编辑 (最初由David J. Antoine在另一个答案中提供)
您必须为SelectionBrowse事件以及“浏览”按钮本身添加条件。使用原始的Browse按钮代码,它看起来像这样:
<Control Id="Browse" Type="PushButton" X="294" Y="210" Width="66" Height="17" Text="!(loc.CustomizeDlgBrowse)">
<Publish Event="SelectionBrowse" Value="BrowseDlg">NOT Installed AND NOT (UPGRADE = 1)</Publish>
<Condition Action="hide">Installed OR UPGRADE = 1</Condition>
<Condition Action="disable">Installed OR UPGRADE = 1</Condition>
</Control>
不幸的是,即使使用它,我也无法禁用“浏览”按钮。充其量,它已启用但在单击时没有执行任何操作。因此,我最终使用代码在两种情况下禁用它以防止UI中的混淆。