如何使用WiX Toolset选择性地安装IIS虚拟目录?

时间:2016-08-17 18:44:29

标签: wix wix-extension

如果安装了IIS,我正在尝试安装虚拟目录。如果没有安装,那就跳过它。

我有这张支票:

<Fragment>
  <Property Id="IIS_MAJOR_VERSION">
    <RegistrySearch Id="CheckIISVersion"
                    Root="HKLM"
                    Key="SOFTWARE\Microsoft\InetStp"
                    Name="MajorVersion"
                    Type="raw" />
  </Property>

  <iis:WebSite Id='DefaultWebSite' Description='Default Web Site' Directory='INSTALLFOLDER'>
    <iis:WebAddress Id="AllUnassigned" Port="80" />
  </iis:WebSite>

</Fragment>

并根据IIS_MAJOR_VERSION的存在,我安装了该功能:

<Feature Id="ProductFeature2" Title="Setup" Level="1">
  <ComponentRef Id="AppIIS" />
  <Condition Level="0">NOT IIS_MAJOR_VERSION</Condition>
</Feature>

这部分似乎有效,但iis:WebSite节点导致问题。如果IIS_MAJOR_VERSION也存在,我只想找到它。

如果我将iis:WebSite节点移动到它可以工作的组件组,但是iis:WebSite未处于“定位器”模式并且安装和卸载(这很糟糕)。

有没有办法可以有条件地运行iis:WebSite支票?

1 个答案:

答案 0 :(得分:0)

从IIS扩展中添加任何元素(如<iis:WebSite>)时,会在InstallExecuteSequence表中添加一个名为ConfigureIIs的特殊自定义操作。在WiX IIS扩展的帮助下,此自定义操作是与IIS管理相关的所有内容的所谓入口点。

幸运的是,ConfigureIIs自定义操作默认情况下是必要时跳过它的方式。如果使用Orca打开生成的MSI包并导航到左窗格中的InstallExecuteSequence表,您将看到条件使用SKIPCONFIGUREIIS属性。因此,我们的想法是将其设置为某种内容(例如1),以防您不需要执行任何与IIS相关的活动。

可以使用SetProperty元素:

完成
<SetProperty Id="SKIPCONFIGUREIIS" Value="1">NOT IIS_MAJOR_VERSION</SetProperty>