2012-06-12 7 views
12

In früheren Installationsprogrammen für Visual Studio Deployment-Projekte konnte ich durch Übergeben eines Befehlszeilenparameters mit einem Wert für TARGETDIR den Standardinstallationspfad überschreiben (die meisten meiner Installationen finden ohne Benutzerinteraktion statt, sodass die Befehlszeilenautomatisierung stark genutzt wird) . Der Eindruck, den ich bekomme, ist jedoch, dass WiX (standardmäßig) TARGETDIR für etwas anderes verwendet. Ich kann (und werde) unsere Befehlszeilentools aktualisieren, um den Parameternamen zu ändern. Dabei bleiben jedoch alle vorhandenen Installationen, die manuell berührt werden müssten (ein nicht unerheblicher Aufwand).Was ist die Verwendung von TARGETDIR und INSTALLDIR in WiX?

Gibt es eine Möglichkeit, den Installationsort in einem WiX-Paket durch Angabe von TARGETDIR zu überschreiben, ohne etwas zu beschädigen?

+0

http://stackoverflow.com/questions/15921078/ wix-toolset-create-directory-im-root-disk-system-disk-or-c-and-copy-files-ich dies funktionierte für mich. Mit dem "anderen Standort" – WtFudgE

Antwort

18

Nach mehr Graben, sieht es so aus, als ob meine vorherige Erfahrung das Verhalten von VSDPROJ (und möglicherweise InstallShield) ist, während WiX dem Windows Installer entspricht.

Wie ich bei this link10 entdeckt habe, soll TARGETDIR eigentlich die Wurzel des Laufwerks mit dem meisten freien Speicherplatz darstellen (vorausgesetzt, es gibt mehr als einen). Aus diesem Grund sind in WiX-Projekten Verzeichnisse für Programmdateien usw. verschachtelt. Visual Studio fügt eine benutzerdefinierte Aktion hinzu, die diese Eigenschaft dem vollständigen Installationspfad überschreibt.

ich war in der Lage zu erreichen, was, indem Sie zwei Dinge, die ich wollte:

  1. ändern alle meine Komponenten und Komponentengruppen zu installieren, um TARGETDIR statt INSTALLFOLDER (das Standardverzeichnis, das WiX dort setzen)
  2. Fügen Sie eine benutzerdefinierte Aktion hinzu, die den Wert der TARGETDIR-Eigenschaft für den Installationspfad festlegt, vorausgesetzt, dass einer von der Befehlszeile nicht übergeben wurde.

, das zu tun, habe ich dies unter dem <Product> tag:

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

Und dies im <InstallExecuteSequence> tag:

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

Das hat mein Thema rund um dieses Thema gelöst! Vielen Dank für das Teilen. – joebalt

+0

Das tut nichts für mich ... Es installiert immer noch meine Sachen in E. – WtFudgE

+1

@WtFudgE: Ihre beste Wette wäre, eine andere Frage zu stellen. –