En los archivos WiX, ¿a qué se refiere Name="SourceDir"?


Los archivos WiX siempre parecen incluir esta línea:

<Directory Id="TARGETDIR" Name="SourceDir">

¿Qué es "SourceDir"? ¿Para qué se utiliza? No es un nombre de directorio real. Es algún tipo de valor mágico?

Author: Stein Åsmul, 2009-10-29

3 answers

De: http://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to

Honestamente, es algo que deberíamos haber ocultado al desarrollador, pero no lo hicimos. La verdad del asunto es que el Instalador de Windows espera que el árbol de directorios esté siempre rooteado en una fila de Directorios donde la clave principal (Directory/ @ Id) es "TARGETDIR" y la columna DefaultDir (Directory/@Name) es "SourceDir".

Durante una instalación, TARGETDIR el valor predeterminado es la unidad más grande de la máquina. SourceDir se establecerá en la ubicación donde se está ejecutando el MSI. Ahora, SourceDir es complicado después de la instalación inicial porque no se establecerá a menos que se llame a la acción ResolveSource. Sin embargo, no desea llamar explícitamente a la acción ResolveSource porque es probable que le pida que proporcione el medio de origen original (también conocido como: insertar el CD, por favor).

Lo que deberíamos haber hecho en el conjunto de herramientas de WiX es eliminar la necesidad de especificar el par TARGETDIR/SourceDir y decir " Cualquier elemento de directorio que no tiene padre será automáticamente parented to TARGETDIR porque eso es lo que el SDK MSI dice que hacer."En cambio, tienes que hacerlo tú mismo... y algunos desarrolladores se preguntan qué significa todo esto.

 85
Author: Rob Mensching,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-11 16:46:46

Del wix.documentación de chm, tema "Cómo: Agregar un Archivo a Su Instalador":

El elemento con el id TARGETDIR es requerido por el Instalador de Windows y es la raíz de todo el directorio estructuras para su instalación

De acuerdo con la documentación de MSDN TARGETDIR es

El directorio de destino raíz para el instalación

También de acuerdo con MSDN, SourceDir es

La raíz directorio que contiene el archivo de gabinete de origen o el archivo de origen árbol del paquete de instalación

Así que la propiedad SourceDir apunta a un directorio real: el donde se encuentra su archivo MSI. Puede ver esto en el registro del instalador al instalar con msiexec /lvx* installer.log installer.msi.

Sin embargo, por alguna razón SourceDir es completamente ignorado al resolver el TARGETDIR. El TARGETDIR debe ser establecido explícitamente (por ejemplo, en la línea de comandos) o bien se resuelve a ROOTDRIVE. Si ROOTDRIVE no es establecer explícitamente entonces es la raíz de la unidad con más espacio libre.

Una prueba rápida muestra que la instalación de un componente en TARGETDIR de hecho pone los archivos en la raíz de mi unidad D:\, en lugar de la carpeta donde se encuentra el MSI.

 21
Author: Wim Coenen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-29 03:20:46

Nada de esto fue realmente útil para mí. Encontré este hilo preguntándome cómo hacer una compilación de depuración, donde mis archivos fuente (los que van en el instalador) podrían extraerse del directorio de compilación "Release" o del directorio de compilación "Debug" del proyecto para el que estoy tratando de hacer un instalador.

Después de un poco de greping, encontré la ruta real en el archivo wixproj, allí SourceDir se define como:

<SourceDir>$(SolutionDir)distribution\Release</SourceDir>

Que realmente no tiene nada que ver con archivos de instalación y archivos de proyecto. Yo estaba capaz de añadir otro PropertyGroup que reflejaba el grupo release que ahora apuntaba a mis archivos de depuración:

<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>

Espero que esto ayude a alguien. Sé que es un poco fuera de tema, pero espero que ayude a alguien en el futuro. ¿No está seguro de por qué el plug-in del proyecto no expone este valor? O me estoy perdiendo?

 2
Author: spujia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-04 01:50:52