2012-06-12 20 views
12

En instaladores heredados de Visual Studio Deployment Project, pasar un parámetro de línea de comando que especificaba un valor TARGETDIR me permitió anular la ubicación de instalación predeterminada (la mayoría de las instalaciones se realizan sin interacción del usuario, por lo que la automatización de línea de comandos se usa mucho) . Sin embargo, la impresión que estoy recibiendo es que WiX (de forma predeterminada) usa TARGETDIR para algo diferente. Si bien puedo (y lo haré) actualizar nuestras herramientas de línea de comandos para cambiar el nombre del parámetro, eso aún deja todas nuestras instalaciones existentes que tendrían que ser tocadas manualmente (un esfuerzo no trivial).¿Cuál es el uso de TARGETDIR y INSTALLDIR en WiX?

¿Hay alguna manera de anular la ubicación de instalación en un paquete de WiX especificando TARGETDIR sin romper nada?

+0

http://stackoverflow.com/questions/15921078/ wix-toolset-create-directory-in-root-disk-system-disk-or-c-and-copy-files-i esto funcionó para mí. Usando la "otra ubicación" – WtFudgE

Respuesta

18

Después de hacer más excavaciones, parece que mi experiencia previa es el resultado del comportamiento específico de VSDPROJ (y posiblemente InstallShield), cuando WiX se ajusta al Windows Installer.

Como descubrí en this link, se supone que el TARGETDIR representa la raíz del disco con el mayor espacio libre disponible (suponiendo que haya más de uno). Es por eso que los proyectos de WiX tienen directorios anidados debajo de Archivos de programa, etc. Visual Studio en realidad agrega una acción personalizada que anula esta propiedad a la ruta de instalación completa.

que fue capaz de lograr lo que quería al hacer dos cosas:

  1. cambiar todos mis componentes y grupos de componentes para instalar a TARGETDIR en lugar de INSTALLFOLDER (el directorio predeterminado que WiX puesto allí)
  2. Agregue una acción personalizada que establezca el valor de la propiedad TARGETDIR en la ruta de instalación, suponiendo que no se haya pasado uno desde la línea de comandos.

Para hacer eso, he añadido esto bajo la etiqueta de <Product>:

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" 
       Value="[ProgramFilesFolder][Manufacturer]\[ProductName]" 
       Execute="firstSequence" /> 

Y esto dentro de la <InstallExecuteSequence> etiqueta:

<Custom Action="SetTARGETDIR" Before="CostFinalize">TARGETDIR=""</Custom> 
+0

¡Esto resolvió mi problema con este tema! Muchas gracias por compartirlo. – joebalt

+0

Esto no hace nada por mí ... Todavía instala mis cosas en E. – WtFudgE

+1

@WtFudgE: Su mejor opción sería publicar otra pregunta. –

Cuestiones relacionadas