wix禁用目录浏览按钮

时间:2010-03-01 16:16:14

标签: wix windows-installer

我们一直在使用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>

问题是浏览按钮永远不会被禁用,有人可以指出我在这里做错了吗?

非常感谢

2 个答案:

答案 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中的混淆。