Visual studio 2010 从VS ultimate 2010迁移到WixEdit时,Wix-UI序列被破坏

Visual studio 2010 从VS ultimate 2010迁移到WixEdit时,Wix-UI序列被破坏,visual-studio-2010,dialog,wix,windows-installer,wix-extension,Visual Studio 2010,Dialog,Wix,Windows Installer,Wix Extension,我在工作中使用VisualStudioUltimate 2010和WIX3.6创建了一个MSI。我从学校得到了VS的副本,但是如果我的公司在我离开后想要编辑msi,它将需要在一个免费软件工具上,所以我正在将安装程序项目迁移到WixEdit 我最终将xml编译成MSI,它似乎正在工作。然而,在测试了一些功能之后,我注意到UI序列在一种特定情况下被破坏: 安装程序在客户端机器上浏览文件,如果找到该文件,将弹出一个名为Custom_DirDataFound的对话框。否则(如果找不到该文件),将显示“自

我在工作中使用VisualStudioUltimate 2010和WIX3.6创建了一个MSI。我从学校得到了VS的副本,但是如果我的公司在我离开后想要编辑msi,它将需要在一个免费软件工具上,所以我正在将安装程序项目迁移到WixEdit

我最终将xml编译成MSI,它似乎正在工作。然而,在测试了一些功能之后,我注意到UI序列在一种特定情况下被破坏:

安装程序在客户端机器上浏览文件,如果找到该文件,将弹出一个名为Custom_DirDataFound的对话框。否则(如果找不到该文件),将显示“自定义数据”对话框。无论这些对话框中发生了什么,单击“下一步”时弹出的下一个对话框应该是Custom_NewInstall

使用我在Visual Studio中编译的MSI,这两个对话框将移动到正确的自定义新安装对话框。但是,在WixEdit MSI中,当按下“下一步”时,只有Custom_DirDataFound将转到Custom_NewInstall。另一方面,Custom_DirData将跳过两个对话框,直接进入Custom_VerifyReadyDlg

下面是我的主UI文件(Custom_Mundo)的一个片段,它定义了Custom_DirData“next”按钮事件:

<Publish Dialog="Custom_DirData" Control="Next" Event="SetTargetPath" Value="DATALOCATION" Order="1">1</Publish>
<Publish Dialog="Custom_DirData" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
<Publish Dialog="Custom_DirData" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
<Publish Dialog="Custom_DirData" Control="Next" Property="COPY" Value="Yes">NOTFOUND = 0</Publish>
<Publish Dialog="Custom_DirData" Control="Next" Event="NewDialog" Value="Custom_NewInstall" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
WixEdit:

Action 12:50:27: Custom_DirData. Dialog created
MSI (c) (84:DC) [12:50:28:530]: Doing action: WixUIValidatePath
MSI (c) (84:DC) [12:50:28:530]: Note: 1: 2205 2:  3: ActionText 
Action 12:50:28: WixUIValidatePath. 
Action start 12:50:28: WixUIValidatePath.
MSI (c) (84:1C) [12:50:28:548]: Invoking remote custom action. DLL: C:\Users\Stephane\AppData\Local\Temp\MSI6859.tmp, Entrypoint: ValidatePath
Action ended 12:50:28: WixUIValidatePath. Return value 1.
Action 12:50:28: Custom_VerifyReadyDlg. Dialog created
我不明白这怎么可能。我对马上在这个论坛上找到解决方案不太乐观,因为这似乎是一个相当模糊的错误,但如果有人有任何故障排除技巧,我将非常高兴听到他们


PS.WixEdit似乎使用的是旧版本的Wix,而我在VS中使用的是Wix 3.6。我不得不对xml进行一些更改以使其在WixEdit上运行,但这些更改都没有影响到任何相关对话框(Custom_Mundo、Custom_DirData、Custom_DirDataFound和Custom_NewInstall)

如果您已经在vs中正确编译了MSI,您可以尝试使用“Dark.exe”(WiX工具包的一部分)将其反编译为XML,您可以在WiX edit中打开它。

没有足够的WiX源代码或日志可以确定,但该对话框上存在影响其显示与否的条件。如果是这种情况,并且对话框没有显示,那么可能最简单的解释是属性值不是您期望的值。我尝试删除会使下一个对话框不显示的条件(尽管没有这些条件,单击“下一步”将不起任何作用,而不是浏览到错误的对话框)我还试着注释掉所有其他“下一步”按钮事件,除了使新对话框出现的事件。这两种变化都没有效果。Custom_NewInstall不会有任何问题,因为它在Custom_DirDataFound中看起来很好。它只是不希望在从Custom_DirData调用时出现。我已将Custom_DirDataFound的“next”事件添加到我的问题中以进行比较。但是它们基本上是相同的幸运的是,我用WIX3.6构建了这个项目,而WixEdit使用了一个旧版本,所以当我尝试用dark反编译并将项目加载到WixEdit中时,我会遇到几百个错误。手动将所有源文件附加到一个文档中并使用WixEdit打开更容易。
Action 13:18:02: Custom_DirData. Dialog created
MSI (c) (98:AC) [13:18:07:734]: Doing action: WixUIValidatePath
MSI (c) (98:AC) [13:18:07:734]: Note: 1: 2205 2:  3: ActionText 
Action 13:18:07: WixUIValidatePath. 
Action start 13:18:07: WixUIValidatePath.
MSI (c) (98:2C) [13:18:07:759]: Invoking remote custom action. DLL: C:\Users\Stephane\AppData\Local\Temp\MSIB9A4.tmp, Entrypoint: ValidatePath
Action ended 13:18:07: WixUIValidatePath. Return value 1.
Action 13:18:07: Custom_NewInstall. Dialog created
Action 12:50:27: Custom_DirData. Dialog created
MSI (c) (84:DC) [12:50:28:530]: Doing action: WixUIValidatePath
MSI (c) (84:DC) [12:50:28:530]: Note: 1: 2205 2:  3: ActionText 
Action 12:50:28: WixUIValidatePath. 
Action start 12:50:28: WixUIValidatePath.
MSI (c) (84:1C) [12:50:28:548]: Invoking remote custom action. DLL: C:\Users\Stephane\AppData\Local\Temp\MSI6859.tmp, Entrypoint: ValidatePath
Action ended 12:50:28: WixUIValidatePath. Return value 1.
Action 12:50:28: Custom_VerifyReadyDlg. Dialog created