3 votes

Définition des conditions sur les composants dans Wix

Dans mon Wix, j'ai beaucoup de fichiers inclus de cette manière :

  $(var.Include) = 1

Je peux donc passer une valeur différente de var.Include pour générer des packages pour différents environnements.

Alors que les packages résultants semblent fonctionner, j'ai remarqué que la taille des packages est toujours assez importante même lorsque je les configure pour ne pas inclure ces composants. Il semble que WiX inclut toujours tous les composants lors de la construction du msi, et choisit seulement de ne pas installer ces composants lorsque le package est créé avec var.Include = 0...

Est-ce un comportement normal ?

6voto

Christopher Painter Points 32519

L'élément condition est utilisé pour déterminer si un composant est installé et non s'il est inclus dans la construction ou non. Assurez-vous également de ne pas confondre les propriétés de l'installateur Windows utilisées dans les instructions conditionnelles et les variables / instructions du préprocesseur. Deux bêtes différentes.

5voto

RinoTom Points 1127

Vous pouvez confirmer en ouvrant votre fichier de sortie MSI en utilisant un logiciel de compression/décompression de fichiers tel que 7zip et en ouvrant le fichier package.cab à l'intérieur du fichier MSI ouvert, et vérifier si vos fichiers avec l'identifiant "mycomponent" sont présents ou non.

J'espère que c'est attendu puisque cela dépend de la variable et cela peut même être quelque chose qui peut être défini à partir de l'appel de commande d'installation en tant que propriété d'installation.

MISE À JOUR: Vous pouvez modifier le WIX comme suit en utilisant des déclarations de préprocesseur, afin qu'il puisse exclure ces composants facultatifs du MSI résultant

          $(var.Include) = 1

3voto

Davidson Corry Points 158

Comme le soulignent @RinoTom et @Christopher, la sélection lors de l'installation (tag Condition) est très différente de la sélection lors de la construction (?if meta-tag). Pour être sélectionnés lors de l'installation, les composants inclus doivent être dans le fichier .msi. L'avantage de cette approche est que vous pouvez définir les propriétés qui déterminent leurs conditions, non seulement au moment de la construction, mais aussi lors de l'installation via des boîtes de dialogue ou AppSearch.

Mais ce que vous demandez, c'est plusieurs constructions de packages, chacune adaptée à un ensemble spécifique de conditions, sélectionnées lors de la construction. Une alternative qui pourrait fonctionner pour vous est de définir chacun des composants en option comme un Fragment dans un fichier séparé. Ensuite, pour chaque configuration de package, compilez uniquement les fragments que vous souhaitez y inclure :

del /q *.wixobj
candle main_package.wxs
for %%f in (optional_1.wxs optional_5.wxs optional_27.wxs) do candle %%f
light *.wixobj -out tailored_package_A.msi

Puisque seuls les fragments que vous avez voulu inclure ont été compilés en .wixobj, ils apparaissent uniquement dans le package de sortie. Cela fonctionne particulièrement bien si vous avez des composants qui sont toujours présents, mais seulement quelques-uns qui sont optionnels.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X