我创建了一个用于将网站安装到iis的Web设置msi。在product.wxs中,我已将目录设置为WWWROOT
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id="IISROOT" Name='WebDir'>
<Directory Id='INSTALLDIR' Name='MyWebSetup'></Directory>
</Directory>
</Directory>
在安装过程中,用户可以为虚拟目录提供所需的名称。如果用户输入“MyWebSetup”以外的任何其他名称,则说“MyWebSetup1”,然后在IIS中列出名为“MyWebSetup1”的虚拟目录和名为“MyWebSetup”的目录。现在我想要的是我需要获得Name ='MyWebSetup',用户输入的名称为'MyWebSetup1'。我尝试过使用自定义操作和许多其他操作来完成此操作,但没有用。因为我是Wix的新手,所以有人可以为我提供一个非常明确的解决方案。任何帮助赞赏。 谢谢。
答案 0 :(得分:3)
我遇到了类似的问题,但[INSTALLDIR],BIN和Service文件夹下有其他文件夹。
在注册表中找到IIS根路径
<Property Id="IISROOTPATH">
<RegistrySearch Id="FindIISRootPath" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" />
</Property>
使用SetDirectory设置目录值,该值在执行序列
中的CostFinalize之前运行<SetDirectory Id="INSTALLDIR" Sequence="execute" Value="[IISROOTPATH][VIRTUALDIR]">NOT Installed</SetDirectory>
<SetDirectory Id="SERVICEFOLDER" Sequence="execute" Value="[INSTALLDIR]\Services">NOT Installed</SetDirectory>
<SetDirectory Id="INSTALLDIRBIN" Sequence="execute" Value="[INSTALLDIR]\bin">NOT Installed</SetDirectory>
然后是目录结构
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="IISROOTPATH">
<Directory Id="INSTALLDIR" Name="MyWebSetup">
<Directory Id="INSTALLDIRBIN" Name="Bin">
<!-- BIN Dicrectory -->
</Directory>
<Directory Id="SERVICEFOLDER" Name="Services">
<!-- SERVICE FILES -->
</Directory>
</Directory>
</Directory>
</Directory>
这是另一个similar question
答案 1 :(得分:0)
我可以通过使用'。'传递installdir的名称来解决这个问题。然后使用setdirectory动态设置installdir的名称。编译时,如果名称传递为'。'然后编译器会忽略它的平均时间,然后如果我们稍后传递installdir名称,那么将设置该名称。
installdir名称应按如下方式传递
<Directory Id='INSTALLDIR'
Name='.'>
setdirectory传递如下。 [VIRTUALDIR]是安装时用户接受的虚拟目录的名称。
<SetDirectory Id="INSTALLDIR" Sequence="execute" Value="[IISROOT][VIRTUALDIR]\">NOT Installed</SetDirectory>
希望它对某人有帮助。