Условно установить функцию не работает в Wix - PullRequest
1 голос
/ 16 июня 2010

У меня есть настройка, которую мне нужно поддерживать на IIS6 и IIS7.Сейчас я использую встроенные расширения IIS для IIS6, например, так:

            <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.

Я также попытался поместить условие в компонент, и это тоже не сработало.

Что-то не так с моимиспользование

Ответы [ 3 ]

1 голос
/ 16 июня 2010

Мой вопрос к вам, где находится свойство IISVERSION.Я не использую схему IIS в WIX, но встроенные свойства для других расширений задокументированы с их схемой, я не вижу IISVERSION в документации по схеме IIS.Я нашел эту ссылку здесь хитрости и советы WiX для поиска в реестре номера версии IIS (это вторая подсказка / подсказка, если она отсортирована по количеству голосов).

Если вы уже используете этот метод для заполнения свойства, тогда я посмотрю на проверку, уверены ли вы, что WiX вернет "# 6" для номера версии из реестра? РЕДАКТИРОВАТЬ: Основная версияDWORD SO # 6 является верным.

РЕДАКТИРОВАТЬ: перечитывая вопрос и «образец», я также установил бы уровень функции на 0 и условие, чтобы он активировал функцию, если IISVERION = 6.легче читать как положительный, отрицательный.

Но все, что говорится, - это ИИСВЕРСИЯ, установленная

0 голосов
/ 17 июня 2010

Вы пытались удалить атрибут Absent=disallow? Документы говорят, что это заставит функцию быть установленной независимо от видимости. Я знаю, что установка уровня на 0 должна полностью отключить функцию, но мне интересно, переопределит ли Absent=disallow это поведение ...

Во всяком случае, если ваш путь работает ...

0 голосов
/ 16 июня 2010

Насколько я знаю, пользовательские действия из стандартных расширений 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>

Надеюсь, это поможет.

...