2009-10-29 16 views
54

archivos de WiX siempre parecen incluir esta línea:En archivos WiX, ¿a qué se refiere Name = "SourceDir"?

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

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

+1

TARGETDIR es donde desea instalar, SourceDir es la ruta hacia donde se encuentra el paquete de instalación que está ejecutando: http://msdn.microsoft.com/en-us/library/aa372452(VS.85). aspx –

Respuesta

79

Desde: 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 hizo. Lo siento. La verdad del asunto es que el instalador de Windows espera que el árbol del directorio siempre se enrute en una fila del directorio donde la clave principal (Directorio/@ Id) es "DIRECCIÓN OBJETIVO" y la columna DefaultDir (Directorio/@ nombre) es "SourceDir" .

Durante una instalación, TARGETDIR utilizará de manera predeterminada 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 solicite que proporcione el medio de origen original (también conocido como: inserte el CD, por favor).

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

20

De la documentación wix.chm, tema "Cómo agregar un archivo a su instalador":

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

de acuerdo con la documentación de MSDN TARGETDIR es

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

También de acuerdo con MSDN, SourceDir es

el directorio raíz que contiene el archivo contenedor fuente o el árbol de archivos fuente del paquete de instalación

Así que la propiedad SourceDir apunta a un directorio real: aquel en el que se encuentra el 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 se ignora por completo al resolver el TARGETDIR. El TARGETDIR debe establecerse explícitamente (por ejemplo, en la línea de comando) o bien se resuelve en ROOTDRIVE. Si ROOTDRIVE no está establecido 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 coloca los archivos en la raíz de mi unidad D: \, en lugar de la carpeta donde se encuentra el MSI.

+2

Gracias por la información. Todavía estoy bastante perplejo. Según entiendo, el atributo Nombre debe ser el nombre de un directorio real, que no es "SourceDir". Si lo dejas, el compilador se queja con un error en la línea de "tienes que tener que configurar Nombre a SourceDir". –

+11

¡Ah! los misterios de Wix! Descubrir todas las sorpresas, inconsistencias y apretones de manos secretos es una verdadera aventura. – Cheeso

Cuestiones relacionadas