我想创建一个自定义对话框,在欢迎对话框之前安排。自定义对话框有一个位图控件,一些文本控件和两个用于取消(SpawnDialog-> CancelDlg)和下一个(NewDialog-> WelcomeDlg)的按钮。没有花哨的自定义操作或设置属性。
我已经找到了以下问题: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 - &gt; welcomeDlg - &gt; verifyDlg - &gt; welcomeDlg - &gt; verifyDlg - &gt; 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序列。
提前感谢您的帮助。
答案 0 :(得分:5)
通常只有1个对话框(welcomeDlg)在InstallUISequence表中有一个条目。所有其他对话框都由NewDialog ControlEvents引入。您所做的是添加一个新对话框,并在welcomeDlg之前在UI序列中安排它。然后,您将NewDialog事件链接到两者。
当你进入verifyDlg时,它会调用和EndDialog控制事件,将控制权转移回InstallUISequence。然后InstallUISequence找到welcomeDlg的入口点,并且该过程重复进行。
您应该删除自定义对话框和欢迎对话框之间的关系,并将其替换为EndDialog控件事件。请注意,这意味着无法从欢迎回到第一个自定义对话框。
如果您需要将自定义对话框作为第一个对话框,那么您需要做很多工作。我建议第一个对话应该是受欢迎的,所以这不是一个好的练习。
我预先排序其他对话框的唯一时间是我替换启动条件。在这种情况下,我不希望安装程序继续,所以没关系。欢迎永远不会被召唤。
答案 1 :(得分:2)
第一个解决方案 您可以将新自定义对话框的条目添加到InstallUISequence表中,并关闭标准欢迎对话框。
第二个解决方案 下载位于SourceForge上的资源,复制并添加一些对话框到项目中并替换所有你想要的东西。
上找到更多详细信息