2016-08-17 78 views
2

我想安装一个虚拟目录(如果安装了IIS)。如果没有安装,那就跳过它。我如何可选择使用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未处于“定位器”模式并且已安装和卸载(这很糟糕)。

有没有一种方法可以有条件地运行iis:WebSite的支票?

回答

0

当您添加IIS扩展中的任何元素(如<iis:WebSite>)时,将在InstallExecuteSequence表中添加一个名为ConfigureIIs的特殊自定义操作。这个自定义操作是一个所谓的与IIS管理相关的所有入口点,借助于WiX IIS扩展。

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

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

它可与SetProperty元素来完成