如果安装了IIS-Feature,如何检入WiX?

时间:2014-11-17 09:32:52

标签: wix burn wix3.8

我已经使用WiX 3.8编写了一个Bootstrapper项目,其中我正在安装IIS Express 8.0并激活一些IIS功能。 激活是一个单独的WXS文件 - 包括很多ExePackages - 就像这样:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
  <PackageGroup Id='ActivateIisFeatures'>
    <ExePackage Id='IIS_WebserverRole'
                DisplayName='Installing IIS: IIS-WebServerRole'
                PerMachine='yes'
                SourceFile='.\Resources\Dism.exe'
                InstallCommand='/Online /Enable-Feature /FeatureName:IIS-WebServerRole'>
    </ExePackage>
    ...
  </PackageGroup>
  ...
</Fragment>
</Wix>

现在我的问题是,通过这种方式,将安装ExePackages并每次激活功能,安装或修复安装程序。 所以我尝试了DetectCondition-Property。 您知道,如果DetectCondition返回false,则Bootstrapper计划安装ExePackage。 但是,即使功能处于活动状态,以下编辑仍会每次都安装ExePackages。          

我有什么办法,IIS功能只会在它们不活动时安装/激活?

提前致谢!

1 个答案:

答案 0 :(得分:1)

好的,我自己也找到了。 这很简单。 DetectCondition在这里不起作用。 我们必须搜索registrykey并检查ExePackage的Installcondition中的结果。 大多数密钥位于“HKLM \ SOFTWARE \ Microsoft \ InetStp \ Components”文件夹中。 iis网站上有一个列表,但它已经过时而且不完整: http://www.iis.net/learn/install/installing-iis-7/discover-installed-components

每个例子:

<util:RegistrySearch Root="HKLM"
                     Key="SOFTWARE\Microsoft\InetStp\Components"
                     Value="W3SVC"
                     Variable="WebServer"/>

<ExePackage Id='IIS_WebServer'
            DisplayName='Installing IIS: IIS-WebServer'
            PerMachine='yes'
            SourceFile='.\Resources\Dism.exe'
            InstallCondition='NOT WebServer'
            InstallCommand='/Online /Enable-Feature /FeatureName:IIS-WebServer'>
</ExePackage>

通过这种方式,一旦激活了某些功能,重新安装或修复设置时就不会再发生这种情况了。

相关问题