Sep*_*lio 2 wix wix-extension wix3.8
我想创建一个自定义对话框,在欢迎对话框之前安排.自定义对话框有一个位图控件,一些文本控件和两个用于取消(SpawnDialog-> CancelDlg)和下一个(NewDialog-> WelcomeDlg)的按钮.没有花哨的自定义操作或设置属性.
我已经找到了以下问题:如何在WelcomeDlg之前插入自定义对话框? 尽管标记为已回答,但提问者使用该答案的解决方案获得与我相同的错误消息(请参阅注释).所以请不要将此标记为重复.
下面的代码(从customDialog.wxs,与dialogRef在WixUi_InstallDir.wxs)不建,以及自定义对话框中显示为第一个对话框,...
<?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>
Run Code Online (Sandbox Code Playgroud)
...但是UI序列完全搞砸了:
customDlg - > welcomeDlg - > verifyDlg - > welcomeDlg - > verifyDlg - > progressDlg ...
因此,单击"安装"按钮会导致跳回欢迎对话框.在第二个"转弯"中,单击安装按钮具有触发安装所需的效果:-P
我尝试通过@Before,@ After或@Sequence(我使用Orca来查看UISequence)在不同的地方安排我的自定义对话框,甚至构建我自己的WelcomeDlg(如下所述:http://neilsleightholm.blogspot. de/2008/08/customized-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控件事件.请注意,这意味着无法从欢迎回到第一个自定义对话框.
如果您需要将自定义对话框作为第一个对话框,那么您需要做很多工作.我建议第一个对话应该是受欢迎的,所以这不是一个好的练习.
我预先排序其他对话的唯一一次是当我替换Launch Conditions时.在这种情况下,我不希望安装程序继续,所以没关系.欢迎永远不会被召唤.
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |