2010-03-01 58 views
3

我们一直使用wix UI扩展库中的CustomizeDlg作为功能选择对话框,但出现了一项新要求,即如果软件正在更新,应该禁用浏览按钮。wix禁用目录浏览按钮

所以我复制对话框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

按照Windows Installer Property Reference,根本没有UPGRADE财产。要验证这是问题,用命令行日志选项像这样运行安装程序:

msiexec /lvx* logfile.txt /i myinstaller.msi 

日志文件会显示在升级过程中使用的所有属性的值。

你正在寻找的条件可能是

<Condition Action="disable">UPGRADINGPRODUCTCODE</Condition> 

,但我没有测试它。

+0

UPGRADE属性是我添加的东西,它被正确设置,问题是即使设置了属性,浏览按钮仍然处于启用状态 – 2010-03-02 15:54:54

0

如果您要为要安装的Feature元素设置ConfigurableProperty属性,它似乎阻止修改浏览按钮(或潜在的与SelectionBrowse事件关联的任何控件)的状态。您可以修改表面上安装的状态,这就是为什么如果您尝试更改/删除功能,隐藏操作将起作用。我没有找到解决办法。我不确定这是Windows安装程序构造还是WiX中的错误。我现在假设前者。

编辑(最初由David J.安东尼在附加应答)

你有一个条件添加到SelectionBrowse事件以及浏览按钮本身。使用原来的浏览按钮的代码,它会是这个样子:

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