web-dev-qa-db-fra.com

Dans les fichiers WiX, à quoi fait référence Name = "SourceDir"?

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?

61
dan-gph

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.

87
Rob Mensching

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.

21
Wim Coenen

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?

2
spujia