我已经使用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功能只会在它们不活动时安装/激活?
提前致谢!
答案 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>
通过这种方式,一旦激活了某些功能,重新安装或修复设置时就不会再发生这种情况了。