Les fichiers WiX semblent toujours inclure cette ligne:
<Directory Id="TARGETDIR" Name="SourceDir">
Qu'est-ce que "SourceDir"? A quoi cela sert? Ce n'est pas un vrai nom de répertoire. Est-ce une sorte de valeur magique?
De: http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to
Honnêtement, c'est quelque chose que nous aurions dû cacher au développeur, mais pas. Désolé. La vérité est que le programme d'installation de Windows s'attend à ce que l'arborescence du répertoire soit toujours enracinée dans une ligne du répertoire où la clé primaire (Répertoire/@ Id) est "TARGETDIR" et la colonne DefaultDir (Répertoire/@ Name) est "SourceDir" .
Lors d'une installation, TARGETDIR sera par défaut le plus grand lecteur de la machine. SourceDir sera défini à l'emplacement où le MSI est exécuté. Maintenant, SourceDir est délicat après l'installation initiale car il ne sera défini que si l'action ResolveSource est appelée. Cependant, vous ne voulez pas appeler explicitement l'action ResolveSource car cela vous invitera probablement à fournir le support source d'origine (alias: insérez le CD, s'il vous plaît).
Ce que nous aurions dû faire dans le jeu d'outils WiX est de supprimer la nécessité de spécifier la paire TARGETDIR/SourceDir et de dire "Tout élément de répertoire qui n'a pas de parent sera automatiquement parent de TARGETDIR parce que c'est ce que le SDK MSI dit de faire." Au lieu de cela, vous devez le faire vous-même ... et certains développeurs se demandent ce que cela signifie.
Dans la documentation de wix.chm, rubrique "Comment: ajouter un fichier à votre programme d'installation":
L'élément avec l'ID TARGETDIR est requis par Windows Installer et est la racine de toutes les structures de répertoires pour votre installation
Selon la documentation MSDN TARGETDIR est
le répertoire de destination racine pour l'installation
Toujours selon MSDN, SourceDir est
le répertoire racine qui contient le fichier CAB source ou l'arborescence de fichiers source du package d'installation
La propriété SourceDir pointe donc vers un véritable répertoire: celui où se trouve votre fichier MSI. Vous pouvez le voir dans le journal du programme d'installation lors de l'installation avec msiexec /lvx* installer.log installer.msi
.
Cependant, pour une raison quelconque, SourceDir est complètement ignoré lors de la résolution de TARGETDIR. Le TARGETDIR doit être soit défini explicitement (par exemple sur la ligne de commande), soit il se résout en ROOTDRIVE. Si ROOTDRIVE n'est pas explicitement défini, il s'agit de la racine du lecteur avec le plus d'espace libre.
Un test rapide montre que l'installation d'un composant sur TARGETDIR place en effet les fichiers à la racine de mon lecteur D: \, au lieu du dossier où se trouve le MSI.
Rien de tout cela ne m'a été vraiment utile. J'ai trouvé ce fil me demandant comment créer une version de débogage, où mes fichiers source (ceux qui vont dans le programme d'installation) pourraient être extraits du répertoire de version "Release" ou du répertoire de version "Debug" du projet que j'essaie de créer un programme d'installation pour.
Après quelques salutations, j'ai trouvé le chemin réel dans le fichier wixproj, SourceDir est défini comme suit:
<SourceDir>$(SolutionDir)distribution\Release</SourceDir>
ce qui n'a vraiment rien à voir avec les fichiers d'installation et les fichiers de projet. J'ai pu ajouter un autre PropertyGroup qui reflétait le groupe de versions qui pointait maintenant vers mes fichiers de débogage:
<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>
J'espère que cela aide quelqu'un. Je sais que c'est un peu hors sujet, mais j'espère que cela aidera quelqu'un à l'avenir. Vous ne savez pas pourquoi le plug-in de projet n'expose pas cette valeur? Ou est-ce que ça me manque?