Wix与条件、属性和;自定义操作

Wix与条件、属性和;自定义操作,wix,wix3.5,Wix,Wix3.5,我在设置对话框按钮的启用状态时遇到问题。该按钮定义为: <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"> <Condition Action="disable">Validated = 0</Condition> <Condition Action="enable">&l

我在设置对话框按钮的启用状态时遇到问题。该按钮定义为:

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Condition Action="disable">Validated = 0</Condition>
<Condition Action="enable"><![CDATA[Validated <> 0]]></Condition>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
我面临的问题是,在自定义操作运行后,“下一步”按钮不会重新启用自身。我可以确认CA确实运行,并且属性设置成功。如果我执行某些其他操作导致UI刷新,则UI将更新,例如,返回一个页面,然后再次前进到此页面,并且将启用“下一步”按钮


如何在自定义操作后刷新按钮状态?这是众所周知的Windows Installer限制。对话框的状态不会改变,除非您以任何其他方式刷新它,例如,如您正确提到的那样,前后移动

这里的解决方法是使用两个相同的对话框,即DialogA和DialogB。DialogA上的PerformValidation按钮将立即执行验证,并调用DialogB(作为NewDialog)。同样,DialogB上的PerformValidation按钮也将执行验证并调用DialogA。因此,您将在每次运行验证时加载对话框,并正确显示按钮状态。用户不会怀疑任何事情,因为他/她只会看到相同的对话框。:-)

这个想法描述得更详细。它被称为“双对话”

希望这会有所帮助。

提供了一个解决方案,可以在自定义操作之后立即重新发布在自定义操作中更改的属性

下面是我如何让它在我的代码中工作的示例:


“”和连接\u字符串\u VALID=“1”]>
1.
请输入数据库配置
{\WixUI\u Font\u Title}数据库设置
1.
1.
CustomAction将CONNECTION_STRING_VALID的值设置为1或0,具体取决于它是否有效,我在其他地方定义了默认值为0



现在,当我单击“验证”按钮时,如果字符串有效,则启用“下一步”按钮

谢谢,我将采用此技术。很遗憾,Windows安装程序非常有限。:)如果没有双对话框,这是可能的,我只是不太明白它是如何工作的。我正在试图弄清楚它。知道,看到并检查他们的CommonUiMsi.msi安装程序,它有一个DB创建屏幕,带有一个验证按钮,在成功后启用,源代码在那里,他们似乎没有使用辅助对话框,我有一种感觉,这与他们如何发布他们的财产有关,但仍在试图弄清楚。这很有效。在我看来,这是一个比双对话方法更好的解决方案。然而,我确实在操作完成和按钮启动之间经历了几秒钟的延迟。这绝对不是问题,只是好奇。我已经有一段时间没有用过它了,但从记忆上看,它对我来说是瞬间的,也许与你的行为有关?出版是我的关键(
<Property Id="Validated" Value="0"/>
<Control Id="PerformValidation" Type="PushButton" X="225" Y="75" Width="50" Height="20" Text="Validate">
<Publish Event="DoAction" Value="ValidateDB">1</Publish>
</Control>
[CustomAction]
public static ActionResult ValidateDatabase(Session session)
{
session.Log("Begin ValidateDatabase");
session["Validated"] = "1";
return ActionResult.Success;
}