gpt4 book ai didi

wix - 如何在不弄乱 UI 序列的情况下在 welcomeDlg 之前插入自定义对话框

转载 作者:行者123 更新时间:2023-12-04 00:43:53 25 4
gpt4 key购买 nike

我想创建一个自定义对话框,安排在欢迎对话框之前。自定义对话框有一个位图控件、一些文本控件和两个用于取消 (SpawnDialog->CancelDlg) 和下一步 (NewDialog->WelcomeDlg) 的按钮。没有花哨的自定义操作或设置属性。

  • Wix 版本:3.8
  • 使用 WixUI_InstallDir.wxs

我已经找到了以下问题:How can I insert custom dialog before WelcomeDlg?尽管它被标记为已回答,但提问者使用该答案的解决方案得到与我相同的错误消息(见评论)。所以请不要将此标记为重复。

以下代码(来自 customDialog.wxs,在 WixUi_InstallDir.wxs 中带有 dialogRef)确实构建了,并且自定义对话框显示为第一个对话框,...

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<Dialog Id="CustomDlg" Width="370" Height="270" Title="[ProductName] - Setup">
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
<Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes"/>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
</Control>
<!-- ... More Controls ... -->
</Dialog>

<InstallUISequence>
<Show Dialog="CustomDlg" After="CostFinalize">NOT Installed OR PATCH</Show>
</InstallUISequence>
</UI>
</Fragment>
</Wix>

...但是 UI 序列完全困惑了:

customDlg -> welcomeDlg -> verifyDlg -> welcomeDlg -> verifyDlg -> progressDlg ...

所以点击“安装”按钮会跳回到欢迎对话框。在第二个“回合”中,单击安装按钮具有触发安装的预期效果:-P

我尝试通过@Before、@After 或@Sequence(我使用 Orca 查看 UISequence)在不同的地方安排我的自定义对话框,甚至构建我自己的 WelcomeDlg(如此处所述:http://neilsleightholm.blogspot.de/2008/08/customised-uis-for-wix.html)。我在 WelcomeDlg 中弄乱了 InstallUISequence-Element,就像在自定义对话框之后安排它一样。但是(惊喜)@After="CustomDlg"与自定义对话框中的@Before="WelcomeDlg"具有相同的效果,再次搞乱了 UI 序列。

我想到了用户帐户控制导致的困惑,但是 UAC 应该怎么做才能退回到 MSI 的 ui 序列?对我来说没有意义。无论如何,我尝试通过 admin-Cmd 运行 MSI,当点击安装按钮时应该抑制 UAC 的任何提示。但仍然是同样困惑的 UI 序列。

在此先感谢您的帮助。

最佳答案

通常只有 1 个对话框 (welcomeDlg) 在 InstallUISequence 表中有一个条目。所有其他对话框都由 NewDialog ControlEvents 引入。您所做的是添加一个新对话框并将其安排在 welcomeDlg 之前的 UI 序列中。然后,您放置一个 NewDialog 事件来链接这两者。

当您到达 verifyDlg 时,它会调用 EndDialog 控制事件,将控制权转移回 InstallUISequence。然后,InstallUISequence 找到 welcomeDlg 的入口点,然后该过程自行重复。

您应该删除自定义对话框和欢迎对话框之间的关系,并将其替换为 EndDialog 控件事件。请注意,这意味着无法从欢迎“返回”到第一个自定义对话框。

如果您需要将自定义对话框作为第一个对话框,您还有很多工作要做。我建议第一个对话应该总是受欢迎的,所以这不是一个好的练习。

我唯一一次预先对附加对话框进行排序是在我替换启动条件时。在这种情况下,我不希望安装程序继续,所以没关系。欢迎永远不会被调用。

关于wix - 如何在不弄乱 UI 序列的情况下在 welcomeDlg 之前插入自定义对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com