2010-06-16 3 views
1

У меня есть настройка, которую мне нужно поддерживать на IIS6 и IIS7. Сейчас Im помощью встроенного расширения 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. Я не использую схему IIS в WIX, но встроенные свойства для других расширений документированы с их схемой, я не вижу IISVERSION в документации для схемы IIS. Я нашел здесь эту ссылку WiX tricks and tips, чтобы найти в реестре номер версии IIS (это второй совет/подсказка, если отсортировано по количеству голосов).

Если вы уже используете этот метод для заполнения свойства, я бы посмотрел на чек, вы уверены, что WiX вернет «# 6» для номера версии из реестра? EDIT: Основная версия - DWORD SO # 6 является правильным.

EDIT: Повторное чтение вопроса и «образец». Я также установил бы уровень детализации в 0 и условие, чтобы оно активировало функцию, если IISVERION = 6. Легче читать как положительное значение a отрицательный.

Но все сказанное является IISVERSION Существо установить

+1

Да, я проверил, если IISVERSION является устанавливая путем создания сообщения условия после извлечения значения, и оно действительно возвращает либо # 6, либо # 7. Я также согласен с установкой Level = 1 и condition = # 6, поскольку это проще читать ... на самом деле то, что у меня было оригинально, но Ive пытались использовать разные комбинации, пытаясь получить условие, чтобы не устанавливать эту функцию. – Damien

+0

Я сделал еще несколько тестов и удалил атрибут Display = "hidden" из этой функции. Теперь я вижу, что эта функция не отображается в диалоговом окне функций на машине IIS7 и отображается на машине IIS6. поэтому я не понимаю, почему он выполняет транзакцию с метабазой и не может найти машину IIS, если компонент не установлен. Я думал, что пользовательские действия в схеме IIS будут пропущены, если соответствующий компонент не будет установлен. – Damien

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

Спасибо, я закончил работу вокруг него, создав переопределение для пользовательского взаимодействия в последовательности выполнения, чтобы не выполнять CONFIGUREIIS, если IISVERSION не является # 6. Но ваш способ выглядит лучше, плюс я никогда не знал об этих свойствах расширения Wix :) – Damien

+0

Условие InstallExecuteSequence, о котором вы говорите, является переключателем «все или ничего». Возможно, вам понадобится более гибкое решение в будущем, и вам придется искать другие способы. –

0

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

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

Смежные вопросы