Wix安装程序 - ICE03:不是有效的外键

时间:2014-09-04 21:55:52

标签: wix windows-installer

我真的在努力解决这些错误。我正在尝试使用以下序列构建设置:

欢迎屏幕 许可证屏幕 范围屏幕 浏览屏幕 功能屏幕 自定义屏幕 快捷方式屏幕 安装概述屏幕 安装/进度屏幕 完成屏幕

而是一次性跳进这个地方,我想我会逐个进行,我就建立了欢迎,许可,范围屏幕。

然后我尝试包含功能屏幕,但我有错误,我将在下面解释。奇怪的是,当我将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.

我并不太担心最后一个......但是“外国”关键错误让我很生气。

有人能指出我正确的方向吗?

感谢。

2 个答案:

答案 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,它很可能是同一个故事。