【问题标题】:Controlling Next Button State in Wix Installer在 Wix 安装程序中控制下一个按钮状态
【发布时间】:2011-01-23 20:39:48
【问题描述】:

我刚开始使用 Wix 安装程序,但在尝试控制 下一个按钮我在我的一个对话框上。我在 Wix 邮件列表上问过这个问题,但没有得到答案,所以我在这里尝试。我取了 WixUI_Mondo.wxs 并将其重命名为 修改它以包含一个用于检查数据库连接的对话框。下边是 我修改后的 WixUI_Mondo.wxs 的 sn-p:

<Publish Dialog="CheckDbConnectionDlg" Control="Next" Event="NewDialog"
Value=VerifyReadyDlg">1</Publish>
<Publish Dialog="CheckDbConnectionDlg" Control="Back" Event="NewDialog"
Value=WelcomeDlg">2</Publish>

现在在我的 CheckDbConnectionDlg.wxs 中,我有一个我正在尝试的 Next 按钮 通过我在 CustomAction 中设置的属性来控制它的启用状态。 下面是我的 CheckDbConnectionDlg.wxs 的 sn-p,带有“下一步”按钮 试图控制。

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
Text="Next">
      <Condition Action="disable">
           <![CDATA[CONTINUE <> "True]]>
      </Condition>
      <Condition Action="enable">
           CONTINUE ="True"
      </Condition>
</Control>

这是我设置属性的自定义操作:

[CustomAction]
public static ActionResult TestSqlConnection(Session testSession)
{
     ...
     ...
     ...
     //If the connection is successful
     testSession["CONTINUE"] = "True";

      // Else set the session to False
     testSession["CONTINUE"] = "False";
}

还有我的 Product.wxs

<UIRef Id="WixUI_CustomUI" />

<Binary Id="SqlCustomAction" SourceFile="SqlCustomAction.CA.dll" />
<CustomAction Id=CA_testSqlConnection" BinaryKey="SqlCustomAction"
DllEntry="TestSqlConnection" Execute="immediate" Return="check" />

<InstallUISequence>
   <Custom Action="CA_testSqlConnection" After="ExecuteAction" />
</InstallUISequence>

当我到达 CheckDbConnectionDlg 时会发生下一步按钮 按我的意愿被禁用,在那个对话框上我有一个按钮来测试 连接到数据库,如果它很好,我希望下一步按钮是 启用,因此可以继续安装;否则,我希望它保持禁用状态。 如果连接成功,则不会启用“下一步”按钮,但如果 我单击返回,然后单击下一步。

谁能告诉我如何纠正这个问题?

【问题讨论】:

    标签: wix


    【解决方案1】:

    这是 Windows Installer 的限制。它不是真正的事件驱动。仅当您从一个对话框转到另一个对话框时才评估条件,而不是在对话框中发生某些事情时评估。标准的解决方法是在控制事件上设置条件,而不是防止转换到下一个对话框。

    【讨论】:

    • 我已经有一个条件,但它基于在我的自定义操作中设置的条件。还有其他方法可以重构上面的代码以使其正常工作吗?
    • 将条件放在控制元素上会在 ControlCondition 表中生成一行。这是我正在谈论的 MSI 部分的限制。而是将条件放在 PublishElement 上,因为这会在 ControlEvent 表中产生一行。您将无法启用/禁用控件,但可以阻止它进入下一个对话框。
    • 看看@Daniel Powell 在这篇帖子link提供的解决方案@
    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多