2014-11-17 33 views
1

我用WiX 3.8編寫了一個Bootstrapper-project,其中我安裝了IIS Express 8.0並激活了一些IIS特性。 激活位於一個單獨的WXS文件 - 包括很多ExePackages的 - 這樣的:如果安裝了IIS功能,如何檢入WiX?

<?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,引導程序計劃安裝ExePackage。 但是,即使功能處於活動狀態,以下編輯仍然會每次安裝ExePackage。

我有什麼要做,IIS功能將只安裝/激活,當他們不活躍?

在此先感謝!

回答

1

好吧,我已經發現了我自己。 這很簡單。 DetectCondition在此處不起作用。 我們必須搜索註冊表項並檢查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> 

通過這種方式,一旦功能被激活,它不會發生當重新安裝或修復設置時。

+0

我不認爲你可以這樣做。這將使dism.exe成爲一個可再發行組件,它將在不同版本的Windows上失敗。 –

相關問題