我在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
):< / p>
<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
我在日志中注意到,当我使用确实存在的应用程序时,在UI处于活动状态时未提及WEBINSTALLDIR
,但是当我选择不存在的应用程序时。
答案 0 :(得分:1)
听起来你可能没有正确解除引用属性,而是将'WEBINSTALLDIR'
视为文字路径。
您在哪里引用WEBINSTALLDIR
?
或者另一个可能的原因是能够写入该文件夹的权限。
乍一看参考文献看起来很好。可能是权限。尝试将Directory
的{{1}}条目移动到与应用程序其余部分相同的目录中。如果可行,则可能无法访问WEBINSTALLDIR
文件夹
答案 1 :(得分:0)
经过一段时间的愚弄,我发现了问题。
原来我的PathEdit
控件挂钩到我的路径属性,Indirect
设置为no而不是yes,所以它使用我的属性名称作为路径,而不是查找其值。