Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix安装程序-ICE03:不是有效的外键_Wix_Windows Installer - Fatal编程技术网

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

Wix安装程序-ICE03:不是有效的外键,wix,windows-installer,Wix,Windows Installer,我真的在努力找出这些错误。我正在尝试使用以下顺序构建设置: 欢迎屏幕 许可证屏幕 范围屏幕 浏览屏幕 功能屏幕 自定义屏幕 快捷屏幕 安装概览屏幕 安装/进度屏幕 终筛 我想我应该一个接一个地做这些事情,而不是一次就跳进停车场,我甚至可以构建欢迎、许可、范围屏幕 然后,我试图包括功能屏幕,但我有一个错误,我将在下面解释。奇怪的是,当我将FeatureDlg更改为CustomizeDlg时,它就可以工作了 然后我尝试在定制LG之前引入BrowseDlg,但现在我在尝试使用FeaturesDlg时不

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

欢迎屏幕 许可证屏幕 范围屏幕 浏览屏幕 功能屏幕 自定义屏幕 快捷屏幕 安装概览屏幕 安装/进度屏幕 终筛

我想我应该一个接一个地做这些事情,而不是一次就跳进停车场,我甚至可以构建欢迎、许可、范围屏幕

然后,我试图包括功能屏幕,但我有一个错误,我将在下面解释。奇怪的是,当我将FeatureDlg更改为CustomizeDlg时,它就可以工作了

然后我尝试在定制LG之前引入BrowseDlg,但现在我在尝试使用FeaturesDlg时不断出现类似错误

我是Wix的新手,所以如果我遗漏了一些明显的东西,请道歉。我正在使用VS2013来构建这个

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" />
我不太担心最后一个。。。但是“外国”的关键错误让我抓狂

谁能给我指出正确的方向吗

谢谢。

您可以查看一些总体ICE信息(如果您不确定ICE检查的功能,建议阅读)正如您所看到的,在这个特定的ICE中可能存在许多不同的错误,因为它涉及到整个数据库引用完整性(外键在链接表中匹配以便可以联接它们)

我从来没有以这种方式处理过Wix中的对话框,我总是使用它-它很好而且简单,并且能神奇地自动完成任务。但是,我已经按顺序处理了Installshield对话框,始终需要同步每个对话框上的下一个上一个按钮事件,以便在按下按钮时打开正确的对话框顺序。它的工作原理类似于排序的双链接列表,带有指向下一个对话框的适当指针。如果把对话搞砸了,对话就会随意出现——这会变成非常奇怪的行为。例如,一个按钮可能根本不起作用,它可能会将您带到错误的对话框,甚至可能会过早地启动整个安装


总之:您需要检查已编译的MSI,以验证对话框序列是否正常工作,包括运行安装程序时的交互操作,以及使用或检查已编译的MSI。也许也有帮助?我见过像这样的外键问题与大小写甚至空格有关,或者是真正的不匹配。

我想你应该使用InstallDirDlg而不是BrowseDlg。BrowseDlg只是文件夹选择对话框,当您想要更改默认安装位置时,它会从InstallDirDlg打开。它包含确定和取消按钮(没有返回和下一步)

看看这里的例子:(别忘了添加WIXUI\u INSTALLDIR属性-请参阅下面的注释)


对于CustomFeaturesDlg,很可能是同一个故事。

请检查。@thierry你修复了吗?@micmica不幸的是,我不记得我是如何修复的,因为我已经看了这么久,一旦我让它工作起来,我就继续前进,除了更新文件之外,我再也不需要更改它了。对不起,我当时没有更新答案!我记得我把所有对话框的定义都拿出来,然后一个接一个地重新添加,始终确保这些对话框是按照正确的顺序定义的,并且每个按钮都是相应地定义的,没有错误。对不起,我帮不上忙了。对不起,回来耽搁了很久。被推到另一个项目!虽然我理解你所说的关于将每个下一个/上一个按钮链接到有效对话框的内容,但它仍然不能解决我的问题,我认为这与一些按钮在某些对话框中不存在有关,因此我目前正在查看codeplex中的每个单独对话框,以确定哪些按钮可用。使用标准设置不是一个选项,因为我需要自定义对话框包括在内,但非常详细的反馈感谢!关于InstallDirDlg与BrowseDlg,您是正确的。我想在安装过程中显示安装文件夹。那么我应该使用什么对话框呢?我会去检查你提供的链接,看看是否有帮助。谢谢
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.