2011-08-02 22 views
10

Así que aquí está la configuración básica. Tengo un proyecto WIX existente que crea un conjunto de fragmentos individuales en una MSI más grande. Estoy tratando de cambiar el proyecto para que pueda seleccionar piezas individuales para instalar. El programa al que me he postulado es que cuando ejecuto heat en los directorios más pequeños para crear los componentes individuales, la ruta de Source no es correcta. Daré un ejemplo, espero que tenga más sentido.La salida de Wix Heat no hace referencia al directorio como yo quiero

Así que tienen la estructura básica de carpetas así:

C: \ ProjDir \ Foo \ Bar1
C: \ ProjDir \ Foo \ Bar2

Solía ​​un comando simplemente cosechar C: \ Foo (Heat.exe dir Foo -dr FOO_DIR_REF -out File.wxs), y ahora lo he cambiado para cosechar cada carpeta de Barra individual (Heat.exe dir Foo \ Bar1 -dr BAR1_DIR_REF -out File1.wxs) y (Heat.exe dir Foo \ Bar2 -dr BAR2_DIR_REF -out File2.wxs). El problema que estoy teniendo es que la salida de la cosecha se ve así:

<Component Id="cmpblablabla" Guid="{stuff-here}"> 
    <File Id="filblabla" KeyPath="yes" Source="SourceDir\Bar1\file.here" /> 
</Component> 

Y cuando se trata de construir el MSI se queja porque no puede encontrar SourceDir \ Bar1. Básicamente lo que necesita es una manera para que se vea algo como esto:

<Component Id="cmpblablabla" Guid="{stuff-here}"> 
    <File Id="filblabla" KeyPath="yes" Source="SourceDir\Foo\Bar1\file.here" /> 
</Component> 

Este parece ser un problema muy simple, que estoy seguro que es fácil de hacer, pero todas las búsquedas que he hecho no ha llegado con algo útil.

Respuesta

13

Tenga en cuenta que light buscará adicionales SourceDir 's para su archivo si se agregan a la ruta de búsqueda de -b

por ejemplo,

light.exe -b Foo ... 
+2

Esto era exactamente lo que necesitaba. Muchas gracias. Es bueno saber que también puede especificar múltiples -b. – Zipper

2

Debe ser

<Component Id="cmpblablabla" Guid="{stuff-here}"> 
    <File Id="filblabla" KeyPath="yes" Source="$(var.ProjectName.TargetPath)\Bar1\file.here" /> 
</Component> 

Diferentes propiedades disponibles son

  • $ (var.ProjectName.TargetPath)
  • $ (var.ProjectName.ProjectDir)
+4

¿Sabes cómo hacer eso usando calor? Sé que -var var.ProjectName.TargetPath me dará la primera parte, pero lo que necesito es la barra 1, y no he encontrado una manera de hacerlo a través del calor. Sé que puedo editar el archivo de forma manual, pero estaba tratando de hacer esto de forma automática. – Zipper

2

Los la respuesta a su pregunta está en el texto de ayuda de heat.exe. :-)

Para terminar con la correcta recolección de directorios, apunte el calor a su directorio raíz (Foo) y especifique el interruptor -srd en la línea de comando. Como dice el texto de ayuda, esto omitirá la recolección de raíz del directorio y lo más probable es que termines con lo que necesitas.

Para una mayor flexibilidad, puede especificar el interruptor -var que proporciona la variable WiX que reemplazará la declaración explícita SourceDir. De nuevo, simplemente ejecute heat.exe y mire a través de la salida; encontrará suficiente información y ejemplos.

Cuestiones relacionadas