0

我创建了一个用于将网站安装到 iis 的 web setup 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 的新手。任何帮助表示赞赏。谢谢你。

4

2 回答 2

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>

这是另一个类似的问题

于 2014-02-21T14:00:25.710 回答
0

我可以通过使用“。”传递 installdir 的名称来解决这个问题。然后使用 setdirectory 动态设置 installdir 的名称。编译时,如果名称作为 '.' 传递。然后编译器会暂时忽略它,然后如果我们稍后传递 installdir 名称,那么将设​​置该名称。

installdir 名称应按如下方式传递

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

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

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

希望它可以帮助某人。

于 2013-11-25T10:54:20.150 回答