Wix- Comment copier un répertoire pour installer un dossier

J’ai un dossier Bin avec beaucoup de fichiers dans mon projet. Pour l’instant, je sais seulement comment append des fichiers spécifiques pour installer le dossier avec le code ci-dessous.

 

Cependant, je souhaite déplacer un répertoire entier vers le chemin d’installation. Par exemple, déplacez le dossier entier “Bin” vers le chemin d’installation “C: \ MyApplication”.

Que dois-je faire alors?

Merci d’avance!

comment inclure une grande arborescence de répertoires dans un installateur wix

Cela semble bon. Mais trop de travail à faire.

Comment copier un dossier dans wix

Le lien ci-dessus a bien fonctionné. Mais ne peut pas copier les sous-dossiers.

Ainsi, j’ai créé une application qui lit l’ensemble du dossier et récupère ses sous-répertoires et ses fichiers et génère les blocs de code nécessaires, tels que

     

Ensuite, j’ai ajouté le bloc de code généré au fichier .wxs.

Le temps initial consacré à la création de cette application n’est pas une perte de temps. Parce que vous pouvez continuer à l’utiliser pour toujours. Je vous recommande de copier fichier par fichier car il est utile lors d’une mise à niveau ou d’une réparation. MSI conserve un enregistrement pour chaque fichier à copier. Il est donc facile à maintenir et utile pour les mises à niveau et les réparations.

Ce que vous voulez utiliser, c’est l’outil WiX heat , utilisé pour “récolter” un répertoire (ou des fichiers individuels) et créer un fichier fragment WiX que vous pouvez utiliser dans votre projet.

Par exemple, vous souhaitez collecter un répertoire, qui peut inclure des sous-répertoires, mais il existe de nombreux fichiers et vous souhaitez tout … Heat le fera pour vous.

Considérez cette structure sortingviale:

 Somedir | |---A file.txt |---An init file.ini |---another file.txt |---subfolder | |---a subfolder file.txt 

Si vous utilisez heat pour récolter ce répertoire, l’outil génère le fichier fragment que vous pouvez utiliser comme référence de composant dans votre projet sans avoir à spécifier les fichiers un à un ou à utiliser une solution de contournement.

Par exemple, la commande de chaleur suivante traitera ce répertoire (à partir d’un niveau supérieur dans cet exemple).

 heat dir somedir -o MyHarvestedStuff.wxs -scom -frag -srd -sreg -gg -cg MyComponentGroupId -dr BIN_DIR_REF 

Où:

 dir = harvest a directory somedir = directory you want to harvest -o MyHarvestedStuff.wxs = the output fragment file -scom -sfrag -srd -sreg = Suppress COM elements, fragments, root directory as element, registry harvesting (these options will create a grouping that most applications can use) -gg = generate GUID's now (this will put the GUID's into your output file, rather than using a wildcard "*". The advantage here is you can use non-standard TARGETDIR, which would not qualify for autogenerated GUID's) -cg MyComponentGroupId = component group. this is what you will use in your feature set to include these files -dr BIN_DIR_REF = this is the directory reference for which to place the files in your final package. 

Le résultat XML ressemble à ceci (ceci a été exécuté sans -gg pour éviter de poster de vrais GUID)

                         

Dans votre fichier de projet, vous auriez quelque chose comme ceci sous votre élément racine:

    

Et dans votre groupe de fonctionnalités:

  ...  ...  

Lier le tout ensemble …

  1. Fournissez votre nouveau fichier fragment à candle avec votre (vos) autre (s) fichier (s)
  2. Fournissez le fichier .wixobj que la candle produit à la light
  3. Résolvez la référence SourceDir dans votre nouveau fichier fragment avec une variable du pré-processeur WiX ou avec l’option -b

    Ex: light ... -b "path to my directory that I harvested" ...

Ne laissez pas la longueur de la réponse vous dissuader d’explorer cette solution, cela fonctionne plutôt bien et c’est assez simple. Maintenant, si vous voulez exclure quelque chose de ce répertoire, c’est une toute autre histoire …