我在工作中用Visual Studio Ultimate 2010和Wix 3.6创建了一个MSI。我从学校有这个VS的副本,但如果我的公司想在我离开后编辑msi,它将需要在一个免费工具上,所以我正在将安装程序项目迁移到WixEdit。
我终于得到了xml编译成一个MSI,它似乎是工作。然而,在测试了一些功能之后,我注意到UI序列在一个特定的情况下被破坏了:
安装程序在客户端机器上浏览文件,如果找到该文件,将弹出一个名为custom_dirdataffound的对话框。否则(如果没有找到文件),将显示一个Custom_DirData对话框。无论在这些对话框中发生了什么,当点击"next"时弹出的下一个对话框应该是Custom_NewInstall。
这两个对话框都移动到我在Visual Studio中编译的MSI中正确的Custom_NewInstall对话框。然而,在WixEdit MSI中,当"next"被按下时,只有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>
下面是Custom_DirDataFound条目进行比较:
<Publish Dialog="Custom_DirDataFound" Control="Next" Event="SetTargetPath" Value="DATALOCATION" Order="1">1</Publish>
<Publish Dialog="Custom_DirDataFound" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
<Publish Dialog="Custom_DirDataFound" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
<Publish Dialog="Custom_DirDataFound" Control="Next" Event="NewDialog" Value="Custom_NewInstall" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
<Publish Dialog="Custom_DirDataFound" Control="Next" Property="COPY" Value="Yes">FOUND = 0</Publish>
可以看到,当next被按下时,Custom_NewInstall应该被清楚地生成。这个主UI文件(Custom_Mundo)和Custom_DirData与它们在Visual Studio中的对等文件是相同的,但是它们在安装过程中的行为是不同的。
我为两个安装程序(VS和WixEdit)运行了一个日志文件,这些对话框的条目几乎相同(只有最后一个条目不同):
VS版本: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:UsersStephaneAppDataLocalTempMSIB9A4.tmp, Entrypoint: ValidatePath
Action ended 13:18:07: WixUIValidatePath. Return value 1.
Action 13:18:07: Custom_NewInstall. Dialog created
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:UsersStephaneAppDataLocalTempMSI6859.tmp, Entrypoint: ValidatePath
Action ended 12:50:28: WixUIValidatePath. Return value 1.
Action 12:50:28: Custom_VerifyReadyDlg. Dialog created
我不明白这怎么可能。我对在这个论坛上找到解决方案不太乐观,因为这似乎是一个相当模糊的错误,但如果有人有任何故障排除提示,我将非常高兴听到他们!
p。WixEdit似乎使用的是旧版本的Wix,而我使用Wix 3.6 VS.我不得不对xml进行一些更改以使其在WixEdit上运行,但没有任何更改影响任何有问题的对话框(Custom_Mundo, Custom_DirData, Custom_DirDataFound和Custom_NewInstall)
如果您已经在vs中正确编译了MSI,您可以尝试使用"Dark.exe" (WiX工具包的一部分)将其反编译为XML,您可以在WiX编辑中打开。