Wix-动态设置INSTALLDIR

时间:2013-11-22 10:04:22

标签: iis wix web-setup-project

我创建了一个用于将网站安装到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的新手,所以有人可以为我提供一个非常明确的解决方案。任何帮助赞赏。 谢谢。

2 个答案:

答案 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>

希望它对某人有帮助。