8
votes

Caractéristiques installés à différents endroits mais référençant les mêmes composants

J'ai un produit composé de plusieurs fonctionnalités pouvant être installées sur différents emplacements par exemple. La fonctionnalité 1 est une exécutable installée dans les fichiers de programme et la fonctionnalité 2 est un site Web installé dans wwwroot. Toutefois, les deux caractéristiques 1 et 2 reposent sur de nombreuses mêmes dll et nécessitent donc que les composants contenant ces DLL doivent être installés dans 2 emplacements différents selon les fonctions installées.

Y a-t-il un moyen d'y parvenir sans définir chaque composant deux fois? p>

Pour fournir un exemple complète de ce que j'essaie d'atteindre, le fichier WXS complet suivant peut être compilé en utilisant: P >

> candle.exe foobar.wxs em> p>

> light.exe -ext -ext wixuiextension foobar.wixobj em> p>

> MSIEXEC / IOOBAR.MSI EM> P>

<DirectoryRef Id='PROGRAM_INSTALLDIR'>
    <Component Id="Component1" Guid="79EC9E0B-8325-427B-A865-E1105CB16B62">
        <File Id="File1" Name="File1.txt" Source="File1.txt" />
    </Component>
    <Component Id="Component2" Guid="702E6573-8FBC-4269-A58D-FD1157111F0F">
        <File Id="File2" Name="File2.txt" Source="File2.txt" />
    </Component>
</DirectoryRef>

<DirectoryRef Id='WEBSITE_INSTALLDIR'>
    <Component Id="Component1.Web" Guid="397E93AA-32FB-425A-A783-386E0CCA2357">
        <File Id="File1.Web" Name="File1.txt" Source="File1.txt" />
    </Component>
    <Component Id="Component2.Web" Guid="5C3AFF06-3623-4524-A90B-72B46DE5572A">
        <File Id="File2.Web" Name="File2.txt" Source="File2.txt" />
    </Component>
</DirectoryRef>

<Feature Id="Feature.Program" 
         Title="My Program" 
         TypicalDefault="install" 
         Level="1" 
         ConfigurableDirectory="PROGRAM_INSTALLDIR" >
    <ComponentRef Id="Component1"/>
    <ComponentRef Id="Component2"/>
</Feature>

<Feature Id="Feature.Website" 
         Title="My Website" 
         TypicalDefault="install" 
         Level="1" 
         ConfigurableDirectory="WEBSITE_INSTALLDIR" >
    <ComponentRef Id="Component1.Web"/>
    <ComponentRef Id="Component2.Web"/>
</Feature>


3 Réponses :


1
votes

2 commentaires

Je ne comprends toujours pas comment cela vous aide à installer les composants communs à 2 emplacements différents, comme spécifié par chaque fonctionnalité. Peut-être que vous pourriez élaborer comment vous voyez cela fonctionner?


Pourquoi voulez-vous dupliquer les composants communs? Les ressources habituellement courantes sont placées dans un lieu public (pour les fichiers de programme de l'échantillon \ Fichiers communs) et tous les produits les utilisent à partir de cet emplacement.



0
votes

Les fonctionnalités peuvent faire référence à un répertoire à parcourir la capacité, mais cela signifie uniquement quelque chose si les composants utilisent des répertoires qui sont ce répertoire ou un enfant de ce répertoire. Sinon, le composant ira au répertoire spécifié. En d'autres termes, vous auriez pu installer pour la fonctionnalité et la plupart des composants à un autre autre (disons [CommonfileFolder] Société \ partagée pour un autre composant et il y en accédera. Ce composant peut alors appartenir à plusieurs fonctionnalités et vous allez bien. < / p>


0 commentaires

14
votes

Vous voyez une limitation dans l'installateur Windows. Un composant ne peut être installé qu'une seule fois via un MSI. Chaque composant ne peut être installé que sur un répertoire unique. Pour avoir le contenu d'un composant installé à deux emplacements différents, vous devez soit créer un autre composant avec le même contenu, soit essayer d'utiliser l'élément CopyFile pour dupliquer le contenu.

Probablement pas ce que vous vouliez entendre, mais c'est la façon dont le programme d'installation Windows fonctionne.

Heureusement, si vous avez choisi d'accéder à l'option 1, alors Wix Toolset ne compressera que la contenue dupliquée dans les composants une fois. Smart Cabbing Rocks! < / p>


0 commentaires