2013-11-22 63 views
0

我创建了一个web安装程序msi,用于将网站安装到iis。在product.wxs中,我已将目录设置为WWWROOTWix-Setting INSTALLDIR动态

<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

我可以通过使用'。'来传递installdir的名称来解决这个问题。然后使用setdirectory动态设置installdir的名称。编译时,如果名称以'。'的形式传递那么编译器会在平均时间忽略它,然后如果我们稍后传递installdir名称,那么将会设置该名称。

的安装目录名称应如下

<Directory Id='INSTALLDIR' 
      Name='.'> 

的setdirectory传递如下传递。 [VIRTUALDIR]是安装时从用户接受的虚拟目录的名称。

<SetDirectory Id="INSTALLDIR" Sequence="execute" Value="[IISROOT][VIRTUALDIR]\">NOT Installed</SetDirectory> 

希望它有助于某人。

3

我有一个类似的问题,但与[INSTALLDIR],BIN和服务文件夹下的其他文件夹。

在注册表中找到

<Property Id="IISROOTPATH"> 
    <RegistrySearch Id="FindIISRootPath" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="PathWWWRoot" Type="directory" /> 
</Property> 

这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> 

随后的目录结构运行IIS的根路径与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

相关问题