如何在自定义操作序列中重复使用自定义对话框?

时间:2015-02-27 01:38:11

标签: dialog installshield

我在Installshield 2012 Spring中使用Basic MSI项目。我在Dialogs部分创建了一个自定义对话框。这个自定义对话框很简单。它不包含任何按钮和1行文本,告诉用户请等待。我希望在我们的安装程序的3个区域中使用它,我们完全沉默,使得它看起来像安装程序什么都不做或崩溃。

我将对话框插入到自定义操作序列列表中,并设置一个事件,当属性设置为FALSE时,它将返回到安装程序。在另一个自定义操作中,我将属性设置为false。我测试了这个行为并且工作正常。

现在解决问题了。我不知道如何在自定义操作序列中重新使用此对话框。我已经尝试使用我发现的sdShowAnyDialog,EnableWindow,EzDefineDialog和WaitOnDialog的installscript示例,我无法让它们显示我的对话框。大部分时间都没有弹出,但在一个案例中,我能够使用sdShowAnyDialog显示一个对话框,但它最终显示了一个完全不同的对话框或说它无法创建对话框。

如果有一种更简单的方法来执行我想要的不涉及installscript或在Dialogs部分中复制对话框,那将是非常棒的。我也不介意使用installscript,但我发现没有关于如何正确执行此操作的非常好的文档,当我尝试示例时,它们似乎永远不会起作用。

1 个答案:

答案 0 :(得分:0)

在基本MSI UI中,以下方法可以显示对话框:

  • 引用对话框名称的适当序列(通常是InstallUISequence)中的条目。这就是InstallWelcome和InstallProgress的显示方式。
  • 另一个对话框控件上的control event。有三种变体:

    • “导航”到相邻对话框的NewDialog事件,用当前对话框替换当前对话框(例如,参见大多数对话框中的“下一步”和“后退”按钮),
    • 显示子对话框或对话框序列的SpawnDialog事件,或
    • 一个SpawnWaitDialog事件,显示一个临时对话框,直到条件发生变化。

    请注意,需要EndDialog事件来终止对话框的每个序列序列,而不是SpawnWaitDialog案例。请注意,SpawnWaitDialog的一些用法存在问题,但这些用途似乎与成本计算相关,而不是自定义等待方案。

如果我正确理解您的场景,我怀疑SpawnWaitDialog事件方法可能最适合您,但请注意accidentally prevent the SpawnWaitDialog from showing a second time很容易。