我在 Visual Studio 2012 中有一个 WiX 项目,用户可以选择安装应用程序、服务器或两者。我的问题是当用户同时选择两者时。
我有一个类似于这样的目录树:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="Company" Name="My company">
<Directory Id="INSTALLDIR" Name="My application"/>
</Directory>
</Directory>
<Directory Id="inetpub" Name="inetpub">
<Directory Id ="WEBINSTALLDIR" Name="wwwroot"/>
</Directory>
</Directory>
一切都只是转储在其各自的文件夹中。我制作了具有不同属性名称的 InstallDirDlg 和 BrowseDlg 的副本,以选择服务器文件的安装位置。仅当用户选择在 IIS 中创建新的虚拟应用程序时才会显示它们(如果他选择现有的应用程序,自定义操作只会获取其物理路径)。
一切正常,直到我选择创建新应用程序时单击下一步按钮。设置会挂起一会儿(当我选择现有应用程序时不会挂起),然后给我一个致命的错误消息:(The specified path 'WEBINSTALLDIR' is unavailable.
错误 1314)
我已经调试了所有自定义操作 (System.Diagnostics.Debugger.Launch()),它们都可以正常工作,并且我已经检查了我的日志,但是我看不到任何可能导致它出错的东西。每个属性都设置为应有的状态。
更新
WEBINSTALLDIR
以下是我的项目中对的所有引用(和WIXUI_WEBINSTALLDIR
,等价于WIXUI_INSTALLDIR
,和_WebBrowseProperty
,等价于_BrowseProperty
):
<Property Id="WIXUI_WEBINSTALLDIR" Value="WEBINSTALLDIR"/>
...
<Control Id="PhysicalPath" Type="PathEdit" X="20" Y="160" Width="320" Height="18" Property="WIXUI_WEBINSTALLDIR" Indirect="no" />
...
<Feature Id="Server" /*snip*/ ConfigurableDirectory="WEBINSTALLDIR">
...
<ComponentGroup Id="Server" Directory="WEBINSTALLDIR">
...
<Property Id="_WebBrowseProperty" Value="WEBINSTALLDIR"/>
...
<Publish Dialog="WebInstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_WEBINSTALLDIR]" Order="1">1</Publish>
<Publish Dialog="WebInstallDirDlg" Control="ChangeFolder" Property="_WebBrowseProperty" Value="[WIXUI_WEBINSTALLDIR]" Order="1">1</Publish>
更新 2
我注意到,在日志中,当我使用一个确实存在的应用程序时,WEBINSTALLDIR
在 UI 处于活动状态时没有提及,但是当我选择一个不存在的应用程序时。