tutorial - wix visual studio 2012
En los archivos WiX, ¿a qué se refiere Name="SourceDir"? (3)
De la documentación de wix.chm, tema "Cómo: Agregar un archivo a su instalador":
El elemento con ID TARGETDIR es requerido por Windows Installer y es la raíz de todas las estructuras de directorio para su instalación
De acuerdo con la documentación de MSDN TARGETDIR es
el directorio raíz de destino para la instalación
También según MSDN, SourceDir es
el directorio raíz que contiene el archivo contenedor de origen o el árbol de archivos de origen del paquete de instalación
Entonces, 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 comandos) 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 instalar 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.
Los archivos WiX siempre parecen incluir esta línea:
<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?
De: http://robmensching.com/blog/posts/2010/1/26/-what-does-NameSourceDir-refer-to
Honestamente, es algo que deberíamos haber ocultado al desarrollador pero no lo hicimos. 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 usará de forma 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 de WiX es eliminar la necesidad de especificar el par TARGETDIR / SourceDir y decir "Cualquier elemento de directorio que no tenga padre será automáticamente criado en 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.
Nada de esto fue realmente útil para mí. Encontré este hilo preguntando cómo hacer una compilación Debug, donde mis archivos fuente (los que van en el instalador) podrían ser extraídos del directorio de compilación "Release" o del directorio de compilación "Debug" del proyecto que estoy tratando de hacer un instalador para.
Después de algunos grepping, 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 los archivos de instalación y los archivos de proyecto. Pude agregar otro PropertyGroup que reflejaba el grupo de publicación que ahora apuntaba a mis archivos de depuración:
<SourceDir>$(SolutionDir)distribution/Debug</SourceDir>
Espero que esto ayude a alguien. Sé que está un poco fuera de tema, pero espero que ayude a alguien en el futuro. ¿No está seguro de por qué el complemento del proyecto no expone este valor? ¿O me estoy perdiendo eso?