【问题标题】:How do I customise the Wix Progress Dialog?如何自定义 Wix 进度对话框?
【发布时间】:2010-08-06 10:00:30
【问题描述】:

我正在尝试自定义标准的 WiX 进度对话框(我想让它显示 ActionData)。我关注了Neil's guide to customising dialogs,但问题是,原来的 ProgressDlg 仍然显示而不是我的。

我想我知道为什么了:如果你看一下source to ProgressDlg,你会看到这段代码:

   <InstallUISequence>
    <Show Dialog="ProgressDlg" Before="ExecuteAction" />
  </InstallUISequence>

因此,它不像大多数对话框那样由另一个对话框发布,而是作为 InstallUISequence 的一部分直接触发。那么我该如何覆盖呢?

【问题讨论】:

    标签: wix wix3.5


    【解决方案1】:

    似乎进度对话框必须是在 ExecuteAction 之前 InstallUISequence 中的最后一件事 - 否则,因为进度对话框是无模式的,它会立即显示然后隐藏。

    因此,我的解决方案只是确保我的自定义进度对话框显示在现有对话框之后:

      <InstallUISequence>
        <Show Dialog="CustomProgressDlg" After="ProgressDlg" />
      </InstallUISequence>
    

    【讨论】:

    • 您可以用您自己的 CustomProgressDlg 替换对 ProgressDlg 的引用。或者编辑现有的 ProgressDlg。
    • InstallUISequence> 为什么上面提到的这段代码不起作用?
    • 这是一个很好的解决方法,但不是一个合适的解决方案。解决方案是去掉所有对 ProgressDlg 的引用。为此,应使用您自己的副本重新定义相应的对话框,如 WelcomeDlg、MaintenanceWelcomeDlg 和 ResumeDlg。
    【解决方案2】:

    @Samuel,它就像 Bob 所说的那样工作:“只要你不引用 ProgressDlg”,但这种说法并不准确。您需要找到所有对 ProgressDlg 的引用,但要在 WiX 源中找到它们。然后,您需要创建您自己的引用 ProgressDlg 并包含在您的设置中的任何对话框的版本(直接或间接使用它!),以使其也引用您的自定义对话框。

    我已经试过这个来解决同样的问题。对于使用例如。除了 ProgressDlg 之外,您还必须创建自己的以下对话框版本:

    • MaintenanceWelcomeDlg
    • ResumeDlg
    • 欢迎Dlg

    这是因为他们定义了一个引用 ProgressDlg 的 Show 元素。

    【讨论】:

      【解决方案3】:

      ProgressDlg 仅在您引用它时安排。如果您想替换它,请自定义您的对话框序列以不引用 ProgressDlg。

      【讨论】:

      • 不是这样吗,因为 WiX UI 扩展在 InstallUISequence 中包含对 ProgressDlg 的引用(正如我在我的问题中所展示的),我可以避免引用它的唯一方法是不使用用户界面扩展?
      • 正如 Neil 的博客文章所示,您创建了一个新片段,它有自己的 DialogRef 到 ProgressDlg;只需在您的自定义片段中替换它。只要不引用 ProgressDlg,就不会包含其 InstallUISequence 调度。
      • 您已经描述了我认为它应该工作的方式:我已经克隆了 WixUI_Adv 并将所有 DialogRef 删除到 ProgressDlg。我已经在我的项目中进行了搜索,以检查没有其他对 ProgressDlg 的引用 - 但它仍然出现在我的 MSI 中 :-(。这可能是 Wix 中的一个错误(我使用的是 3.5.1804) ?
      【解决方案4】:

      @Klaus,幸运的是您不必使用 v3.11.1 重新创建您自己的对话框版本。在InstallUISequence 中,您可以覆盖对话序列,例如

      &lt;Show Dialog="WelcomeDlg" Before="ProgressDlgCustom"&gt;NOT Installed OR PATCH&lt;/Show&gt;

      确保省略 Show/@override - 这是 WelcomeDlg 中的确切条件。

      【讨论】:

      • 这仍然会使 ProgressDlg 泄漏到生成的 MSI 中(可能是由于 WiX Linker 中的遗漏)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2017-07-18
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      相关资源
      最近更新 更多