如何在welcomeDlg之前插入一个自定义对话框,而不会弄乱UI-Sequence



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

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

我已经发现了以下问题:我如何在WelcomeDlg之前插入自定义对话框?尽管它被标记为已回答,但使用该答案的解决方案时,提问者得到与我相同的错误消息(请参阅注释)。所以请不要把这个标记为副本。

下面的代码(来自customDialog。wxs,在WixUi_InstallDir.wxs)中使用dialgref构建,并且自定义对话框显示为第一个对话框,…

<?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…

所以点击"install"按钮会跳转回欢迎对话框。在第二个"回合"中,点击install按钮可以达到触发安装的预期效果:-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序列。

提前感谢您的帮助。

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

当你得到verifyDlg时,它调用一个EndDialog控制事件,该事件将控制转移回InstallUISequence。然后InstallUISequence找到welcomeDlg的入口点,并重复该过程。

您应该删除自定义对话框和欢迎对话框之间的关系,并用EndDialog控件事件替换它。注意,这意味着不可能从欢迎返回到第一个自定义对话框。

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

我唯一一次在前面排列额外的对话框是在我替换启动条件的时候。在这种情况下,我不希望安装程序继续,所以这很好。欢迎永远不会被调用

第一个解您可以在InstallUISequence表中添加新的自定义对话框条目,并关闭标准的欢迎对话框。

第二方案在SourceForge上下载源代码,复制并添加一些对话框到你的项目中,并替换所有你想要的。

更多细节可以在我的博客上找到

相关内容

  • 没有找到相关文章

最新更新