0

我在 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 处于活动状态时没有提及,但是当我选择一个不存在的应用程序时。

4

2 回答 2

1

听起来您可能没有正确取消引用该属性,而是将'WEBINSTALLDIR'其视为文字路径。

你在哪里参考WEBINSTALLDIR

或者另一个潜在的原因是能够写入该文件夹的权限。

乍一看,参考文献看起来不错。可能是权限。尝试将Directory条目移动WEBINSTALLDIR到与应用程序的其余部分相同的目录中。如果可行,那么它可能根本无法访问该wwwroot文件夹

于 2013-03-19T17:29:12.787 回答
0

经过一段时间的鬼混,我发现了这个问题。

结果PathEdit我的路径属性挂钩的控件Indirect设置为 no 而不是 yes,所以它使用我的属性名称作为路径,而不是查找它的值。

于 2013-03-20T18:00:01.977 回答