我真的在努力解决这些错误。我正在尝试使用以下序列构建设置:
欢迎屏幕 许可证屏幕 范围屏幕 浏览屏幕 功能屏幕 自定义屏幕 快捷方式屏幕 安装概述屏幕 安装/进度屏幕 完成屏幕
而是一次性跳进这个地方,我想我会逐个进行,我就建立了欢迎,许可,范围屏幕。
然后我尝试包含功能屏幕,但我有错误,我将在下面解释。奇怪的是,当我将FeatureDlg更改为CustomizeDlg时,它可以工作。
然后我尝试在CustomizeDlg之前引入BrowseDlg,但现在我在尝试使用FeaturesDlg时遇到类似的错误。
我是Wix的新手,如果我留下了明显的东西,请道歉。我正在使用VS2013来构建它。
我的UI.Wxs在其UI标记中包含以下代码
<DialogRef Id="BrowseDlg" />
<DialogRef Id="DiskCostDlg" />
<DialogRef Id="ErrorDlg" />
<DialogRef Id="FatalError" />
<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />
<DialogRef Id="PrepareDlg" />
<DialogRef Id="ProgressDlg" />
<DialogRef Id="ResumeDlg" />
<DialogRef Id="UserExit" />
<!--<DialogRef Id="FeaturesDlg" />-->
<DialogRef Id="CustomizeDlg" />
<!-- Welcome -->
<Publish Dialog="WelcomeDlg"
Control="Next"
Event="NewDialog"
Value="LicenseAgreementDlg">NOT Installed</Publish>
<!-- License -->
<Publish Dialog="LicenseAgreementDlg"
Control="Back"
Event="NewDialog"
Value="WelcomeDlg">1</Publish>
<Publish Dialog="LicenseAgreementDlg"
Control="Next"
Event="NewDialog"
Value="InstallScopeDlg">LicenseAccepted = "1"</Publish>
<!-- Scope -->
<Publish Dialog="InstallScopeDlg"
Control="Back"
Event="NewDialog"
Value="LicenseAgreementDlg">1</Publish>
<Publish Dialog="InstallScopeDlg"
Control="Next"
Event="NewDialog"
Value="BrowseDlg">1</Publish>
<!-- BrowseDlg -->
<Publish Dialog="BrowseDlg"
Control="Back"
Event="NewDialog"
Value="InstallScopeDlg">1</Publish>
<Publish Dialog="BrowseDlg"
Control="Next"
Event="NewDialog"
Value="CustomizeDlg">1</Publish>
<!-- Features -->
<Publish Dialog="CustomizeDlg"
Control="Back"
Event="NewDialog"
Value="BrowseDlg">1</Publish>
<Publish Dialog="CustomizeDlg"
Control="Next"
Event="NewDialog"
Value="CustomFeaturesDlg">1</Publish>
<!--Custom Features--><!--
<Publish Dialog="CustomFeaturesDlg"
Control="Back"
Event="NewDialog"
Value="FeaturesDlg">1</Publish>
<Publish Dialog="CustomFeaturesDlg"
Control="Finish"
Event="EndDialog"
Value="Return">1</Publish>-->
<!-- Finished -->
<Publish Dialog="ExitDialog"
Control="Finish"
Event="EndDialog"
Value="Return"
Order="999">1</Publish>
<UIRef Id="WixUI_Common" />
现在我得到的错误是:
Error 1 ICE03: Not a valid foreign key; Table: ControlEvent, Column: Control_, Key(s): BrowseDlg.Back.NewDialog.InstallScopeDlg.1
Error 2 ICE03: Not a valid foreign key; Table: ControlEvent, Column: Control_, Key(s): BrowseDlg.Next.NewDialog.CustomizeDlg.1
Error 3 ICE03: Not a valid foreign key; Table: ControlEvent, Column: Control_, Key(s): CustomFeaturesDlg.Finish.EndDialog.Return.1
Error 4 ICE03: Not a valid foreign key; Table: ControlEvent, Column: Control_, Key(s): CustomFeaturesDlg.Back.NewDialog.FeaturesDlg.1
Error 5 ICE17: PushButton: 'Back' of Dialog: 'FeaturesDlg' does not have an event defined in the ControlEvent table. It is a 'Do Nothing' button.
我并不太担心最后一个......但是“外国”关键错误让我很生气。
有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:0)
您可以查看this answer以获取一些整体ICE信息(如果您不确定ICE检查的作用,建议阅读)。 Here is the ICE03 MSDN page - 如您所见,在此特定ICE中可能存在许多不同的错误,因为它涉及整体数据库参照完整性(外键在链接表中匹配,以便它们可以连接)。
我从未以这种方式处理过Wix中的对话框,我总是只使用the default dialog set as explained here - 这很简单,并且可以完成自动魔法的工作。但是,我已经按顺序处理了Installshield对话框,并且始终需要在每个对话框上同步 next 和 previous 按钮事件,以允许正确的对话框序列按下按钮时展开。 它的工作方式类似于一个双向链接列表,其中包含指向下一个对话框的正确指示。如果搞砸了,对话框会随意显示 - 这可能会变成非常奇怪的行为。例如,按钮可能根本不起作用,它可能会将您带到错误的对话框,或者甚至可能过早地启动整个安装。
总之:您需要检查已编译的MSI,以便在运行设置时以交互方式验证对话框序列是否正常工作,并使用Orca检查已编译的MSI或a similar tool。也许this description of Orca也有帮助吗?我看到这样的外键问题与大写甚至空白或真正的不匹配有关。
答案 1 :(得分:0)
我想您想使用InstallDirDlg而不是BrowseDlg。 BrowseDlg只是当您想要更改默认安装位置时从InstallDirDlg打开的文件夹选择对话框。它包含OK和Cancel按钮(没有Back和Next)。
在这里查看示例:WiX installer fails with error code 2819(不要忘记添加WIXUI_INSTALLDIR属性 - 请参阅下面的注释)。
对于CustomFeaturesDlg,它很可能是同一个故事。