2010-06-16 66 views
1

我有一個需要在IIS6和IIS7上支持的設置。現在即時通訊使用內置的IIS擴展名IIS6像這樣:有條件的安裝功能在Wix中不起作用

  <Component Id="C_IISApplication" Guid="{9099909C-B770-4df2-BE08-E069A718B938}" >      
       <iis:WebSite Id='TSIWSWebSite' Description='TSWeb' SiteId='*' Directory='INSTALLDIR'>       
        <iis:WebAddress Id='tcpAddress' Port='8081' /> 
       </iis:WebSite> 
       <iis:WebAppPool Id="BlahWSApplicationPool" Name="Blah" /> 
       <iis:WebVirtualDir Id="VirtualDir" 
            Alias="Blah" 
            Directory="INSTALLDIR" 
            WebSite="BlahWSWebSite" 
            DirProperties="WebVirtualDirProperties"> 

        <iis:WebApplication Id="WebApplication" 
             Name="Blah" 
             WebAppPool="BlahWSApplicationPool"/> 

       </iis:WebVirtualDir> 
      </Component> 

我在功能嘗試了條件,像這樣:

<Feature Title="IIS6" Id="IIS6" Description="IIS6" ConfigurableDirectory="INSTALLDIR" Level="1" Absent="disallow" Display="hidden"> 
     <ComponentRef Id="C_IISApplication" /> 
     <Condition Level="0"><![CDATA[IISVERSION <> '#6']]></Condition> 
    </Feature> 

不管是什麼我條件的值,元數據庫東西得到執行,並在IIS7系統上出現錯誤。

我也曾嘗試把在組件的條件和沒有工作要麼。

有什麼錯我的使用情況?

回答

1

我給你的問題是在哪裏是IISVERSION屬性設置。我沒有在WIX中使用IIS模式,但其他擴展的內置屬性用它們的模式記錄,我沒有在IIS模式的文檔中看到IISVERSION。我在這裏找到了這個參考WiX tricks and tips在註冊表中搜索IIS的版本號(如果按投票計數排序,這是第二個提示/提示)。

如果你已經使用該方法來填充屬性,那麼我會看看檢查,你確定WiX會從註冊表中返回版本號的「#6」嗎?編輯:主要版本是DWORD SO#6是正確的。

編輯: 重新讀取問題和'樣本'我還將功能級別設置爲0和條件,所以它會激活該功能,如果IISVERION = 6。它更容易閱讀爲積極的a負。

但所有他這樣說是IISVERSION被設置

+1

是的,我檢查是否IISVERSION是通過在檢索值之後創建條件消息來設置,並且它確實返回#6或#7。 我也同意設置級別= 1和條件=#6,因爲它更易於閱讀...它實際上我做了什麼orginally但我一直在嘗試不同的組合,試圖讓病情不安裝該功能。 – Damien 2010-06-16 04:30:41

+0

我做了一些更多的測試,並從該功能中刪除了Display =「hidden」屬性。 我現在可以看到該功能在IIS7機器上的功能對話框中不可見,並且在IIS6機器上可見。所以我不明白爲什麼它執行配置數據庫事務,如果沒有安裝組件,不能找到IIS機器。 如果沒有安裝相應的組件,我會認爲IIS架構中的自定義操作都將被跳過。 – Damien 2010-06-16 05:09:26

0

據我所知,從標準WiX的擴展(如IIsExtension)的自定義操作綁定到組件的條件執行。

而且,目前尚不清楚其中IISVERSION財產從何而來,但IIsExtension公開,並設置正確自己的屬性稱爲IISMAJORVERSION和IISMINORVERSION。所以,在你的情況下,IISMAJORVERSION將參與組件條件。

我有我的解決方案類似的代碼:

<Fragment> 
     <PropertyRef Id="IISMAJORVERSION"/> 
     <PropertyRef Id="IISMINORVERSION"/> 
     ... 

     <!-- This component is to be installed on IIS 6. It creates a new site with the name provided by user --> 
     <Component DiskId="1" Id="CreateIISSite6" Guid="{GUID}" Directory="WebsiteFolder"> 
     <Condition>IISMAJORVERSION = "#6" AND CREATE_IIS_SITE</Condition> 
     <CreateFolder/> 
     <iis:WebSite Id="NewIISSite6" SiteId="[IISSITE_ID]" Description="[IISSITE_NAME]" AutoStart="yes" Directory="WebsiteFolder" WebApplication="IISSiteApplication6" DirProperties="IISRootWebDirProperties"> 
      <iis:WebAddress Id="NewIISSiteAddress6" Header="[IISSITE_HEADER]" Port="[IISSITE_PORT]" /> 
     </iis:WebSite> 
     </Component> 
     ... 
    </Fragment> 

希望這有助於。

+0

謝謝,我最終通過創建覆蓋執行順序中的customaction來解決它,如果IISVERSION不是#6,則不執行CONFIGUREIIS。 但是你的方式確實看起來更好,再加上我從來不知道這些Wix擴展屬性:) – Damien 2010-06-17 00:02:21

+0

你所說的InstallExecuteSequence條件是一個'全有或全無'開關。將來您可能需要更靈活的解決方案,並且您必須找到其他方法。 – 2010-06-17 06:47:46

0

你有沒有嘗試刪除Absent=disallow屬性?文檔稱這將強制安裝該功能,而不管其可見性如何。我所知道的級別設置爲0應該禁用完全的功能,但我不知道是否Absent=disallow覆蓋此行爲......

無論如何,如果你的工作方式......