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 :
Je recommande de créer une fonctionnalité distincte contenant uniquement les composants courants. Il ne devrait pas être installé par défaut. Vous pouvez ensuite créer une action personnalisée qui marque cette fonction pour l'installation uniquement lorsque l'une de vos fonctionnalités réelles est installée. P>
Pour marquer la fonctionnalité de l'installation, vous pouvez utiliser la fonction MSEetfeaturestate: http://msdn.microsoft.com/en-us/ Bibliothèque / AA370387 (vs.85) .aspx P>
L'action personnalisée qui peut être conditionnée avec l'action de fonctionnalités de vos fonctionnalités: http://msdn.microsoft.com/en-us/ Bibliothèque / AA368561 (vs.85) .aspx P>
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.
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>
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. P>
Probablement pas ce que vous vouliez entendre, mais c'est la façon dont le programme d'installation Windows fonctionne. P>
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>
Pour quiconque cherche à savoir comment cette question a été résolue, j'ai fini par utiliser la méthode 3 de ce Article de support Microsoft A > Pour que le site Web puisse charger ses dlls à partir de l'emplacement des fichiers du programme et installé une copie unique des DLL. Seul un petit nombre de DLL doivent être dupliqués car ils sont tenus de charger l'application Web avant de pouvoir configurer le gestionnaire AssemblageResolve. Notre logiciel est un peu bizarre en ce que le site Web utilise la réflexion pour charger un grand nombre d'objets à partir d'un grand nombre de DLL, ce qui définit la définition de composants en double ou la définition de la