Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何自定义Wix进度对话框?_Wix_Wix3.5 - Fatal编程技术网

如何自定义Wix进度对话框?

如何自定义Wix进度对话框?,wix,wix3.5,Wix,Wix3.5,我正在尝试定制标准WiX进度对话框(我想让它显示ActionData)。我一直在关注,但问题是,原来的ProgressDlg仍在显示,而不是我的 我想我知道为什么了:如果你看一下,你可以看到这段代码: <InstallUISequence> <Show Dialog="ProgressDlg" Before="ExecuteAction" /> </InstallUISequence> 因此,它不是像大多数对话框那样由另一个对话框发布,

我正在尝试定制标准WiX进度对话框(我想让它显示ActionData)。我一直在关注,但问题是,原来的ProgressDlg仍在显示,而不是我的

我想我知道为什么了:如果你看一下,你可以看到这段代码:

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


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

似乎在执行操作之前,进度对话框必须是安装序列中的最后一个内容-否则,因为进度对话框是非模态的,所以它会立即显示然后隐藏

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

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


ProgressDlg仅在您参考它时才被安排。如果要替换它,请自定义对话框序列,使其不引用ProgressDlg。

@Samuel,它正在工作,正如Bob所说:“只要不引用ProgressDlg”,但此语句并不精确。您需要找到对ProgressDlg的所有引用,但请在WiX源代码中找到它们。然后,您需要创建引用ProgressDlg并包含在您的设置中的任何对话框的您自己的版本(直接或间接使用它!),以便使其也引用您的自定义对话框

我试着用这个来解决同样的问题。要使用FeatureTree UI序列,除ProgressDlg外,您还必须创建以下对话框的自己版本:

  • 维修福利金
  • 恢复
  • 韦尔科姆德尔格

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

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

未安装或修补程序


请确保您省略了Show/@override——这正是WelcomeDlg中的条件。

是不是因为WiX UI扩展在InstallUISequence中包含对ProgressDlg的引用(如我在问题中所示)我能避免引用它的唯一方法是不使用UI扩展?正如Neil的博客文章所示,您创建了一个新片段,它有自己的DialogRef to ProgressDlg;只需在自定义片段中替换它。只要您不引用ProgressDlg,它的InstallUISequence调度就不会包括在内。您已经描述了我认为它应该工作的方式:我克隆了WixUI\u Adv并将所有DialogRef删除到ProgressDlg。我已经在我的项目中进行了搜索,以检查是否有其他对ProgressDlg的引用,但它仍然会出现在我的MSI:-(.这可能是Wix中的错误吗(我使用的是3.5.1804)?您可以用自己的自定义ProgressDlg替换对ProgressDlg的引用。或者编辑现有的ProgressDlg。InstallUISequence>为什么上面提到的代码不起作用?这是一个很好的解决方法,但不是一个合适的解决方案。解决方案是删除对ProgressDlg的所有引用。为此,请使用相应的对话框,如Welcometlg、 MaintenanceWelcomeDlg和ResumeDlg应该用您自己的副本重新定义。这仍然会使ProgressDlg泄漏到生成的MSI中(可能是由于WiX链接器中的遗漏)。