如何选择使用 WiX 工具集安装 IIS 虚拟目录?

How can I optionally install IIS virtual directory with WiX Toolset?

如果安装了 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 不在 'locator' 模式下并被安装和卸载(这很糟糕)。

有没有一种方法可以有条件地 运行 检查 iis:WebSite

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

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

可以用SetProperty元素来完成:

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