2010-06-16 2 views
1

J'ai une configuration que je dois prendre en charge sur IIS6 et IIS7. Pour l'instant Im en utilisant les construit dans les extensions IIS pour IIS6 comme ceci:Fonctionnalité d'installation conditionnelle ne fonctionnant pas dans 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> 

J'ai essayé une condition dans les caractéristiques comme ceci:

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

Quelle que soit la valeur de mon état, la métabase les choses sont exécutées et j'obtiens une erreur sur les systèmes IIS7.

J'ai également essayé de mettre la condition dans le composant et cela n'a pas fonctionné non plus.

Y at-il un problème avec mon utilisation?

Répondre

1

Ma question est de savoir où est définie la propriété IISVERSION. Je n'utilise pas le schéma IIS dans WIX, mais les propriétés intégrées pour les autres extensions sont documentées avec leur schéma, je ne vois pas un IISVERSION dans la documentation pour le schéma IIS. J'ai trouvé cette référence ici WiX tricks and tips pour rechercher dans le registre le numéro de version de IIS (C'est le deuxième indice/conseil si trié par nombre de votes). Si vous utilisez déjà cette méthode pour remplir la propriété, alors je regarderais la vérification, êtes-vous sûr que WiX retournera "# 6" pour un numéro de version du registre? EDIT: La version majeure est un DWORD SO # 6 est correct. Relecture de la question et de l '«échantillon» Je définirais également le niveau de fonctionnalité à 0 et la condition de sorte qu'il ACTIVERait la fonction si IISVERION = 6. Il est plus facile de lire comme un positif négatif.

Mais tout ce qui est dit IISVERSION être mis

+1

Oui, j'ai vérifié si IISVERSION est étant défini en créant un message de condition après avoir récupéré la valeur et il renvoie en effet soit # 6 ou # 7. Je suis également d'accord avec le réglage de Level = 1 et la condition = # 6 comme il est plus facile à lire ... c'est réellement ce que j'avais initialement mais j'ai essayé différentes combinaisons essayant d'obtenir la condition de ne pas installer la fonctionnalité. – Damien

+0

J'ai effectué d'autres tests et supprimé l'attribut Display = "hidden" de la fonction. Je peux maintenant voir que la fonctionnalité n'est pas visible dans la boîte de dialogue des fonctions sur la machine IIS7 et visible sur la machine IIS6. donc je ne comprends pas pourquoi il fait la transaction de métabase et ne peux pas trouver la machine IIS si le composant n'est pas installé. Je pensais que les actions personnalisées dans le schéma IIS seraient toutes ignorées si le composant correspondant n'était pas installé. – Damien

0

Pour autant que je sache, les actions personnalisées des extensions standard Wix (comme IIsExtension) sont liés aux conditions de composant à exécuter.

De même, il n'est pas clair d'où provient la propriété IISVERSION, mais IIsExtension expose et définit correctement ses propres propriétés appelées IISMAJORVERSION et IISMINORVERSION. Donc, dans votre cas, IISMAJORVERSION participerait à la condition du composant.

J'ai un code similaire dans ma solution:

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

Hope this helps.

+0

Merci, j'ai fini par contourner le problème en créant un remplacement pour la customaction dans la séquence d'exécution pour ne pas exécuter CONFIGUREIIS si IISVERSION n'est pas # 6. Mais votre chemin semble meilleur et je n'ai jamais entendu parler de ces propriétés d'extension Wix :) – Damien

+0

La condition InstallExecuteSequence dont vous parlez est un commutateur «tout ou rien». Vous aurez peut-être besoin d'une solution plus flexible à l'avenir, et vous devrez trouver d'autres moyens. –

0

Avez-vous essayé de supprimer l'attribut Absent=disallow? Les docs disent que ceci forcera la fonctionnalité à être installée indépendamment de la visibilité. Je sais que le réglage du niveau 0 devrait désactiver la fonction tout à fait, mais je me demande si Absent=disallow remplace ce comportement ...

Quoi qu'il en soit, si le chemin fonctionne ...

Questions connexes