2010-08-11 5 views
14

Gibt es eine Möglichkeit, eine Umgebungsvariable in WIX in eine Eigenschaft zu erhalten?Ruft eine Umgebungsvariable in einer WIX-Eigenschaft ab

Ich versuche, die USERPROFILE mit zu bekommen:

Property Id="UserFolder" Value="$(env.USERPROFILE)\EdwardsApp\MyFolder" 

Aber das nimmt nur die USERPROFILE der Baumaschine, wo der Installateur eingebaut ist.

Ich möchte, dass die USERPROFILE der Maschine verwendet wird, auf der die App installiert wird.

+3

Die Verwendung von $ (env.USERPROFILE) würde Ihnen den Wert von UserProfile auf Ihrer Build-Maschine bringen, während Sie Ihr Wix-Installationsprogramm erstellen würden. Einige gute Lösungen werden bereits beantwortet. –

+1

Zusätzlich zu Farrukhs Kommentar: Die '$ (env ...)' Syntax kommt vom [WiX Preprocessor] (http://wixtoolset.org/documentation/manual/v3/overview/preprocessor.html). – CodeFox

Antwort

10

Sie können Umgebungsvariablen während der Installation verwenden, dies erfordert jedoch die Verwendung einer benutzerdefinierten Aktion. Sie müssen die UserFolder-Eigenschaft mit einem Type 51 Custom Action im Gegensatz zu dem Festlegen der Eigenschaft während des Builds festlegen. Das Format [% ENVVARNAME] wird verwendet, um eine Umgebungsvariable zu verwenden, aber der Name der Umgebungsvariablen unterscheidet zwischen Groß- und Kleinschreibung.

Ein WiX Beispiel für eine benutzerdefinierte Aktion, die eine Eigenschaft setzt:

<CustomAction Id="SetUserFolder" Property="UserFolder" Value="[%USERPROFILE]EdwardsApp\MyFolder" /> 

Sie können hier mehr über benutzerdefinierte Aktionen in WiX lesen:

http://blogs.technet.com/b/alexshev/archive/2008/02/21/from-msi-to-wix-part-5-custom-actions.aspx

+0

USERPROFILE hat keinen abschließenden umgekehrten Schrägstrich, also sollte es nicht sein: Wert = "[% USERPROFILE] \ EdwardsApp \ MyFolder" – Jamie

+0

Ich versuche, die ProgramFiles (x86) Umgebungsvariable zu verwenden, aber ich kann nicht scheinen um herauszufinden, wie man den Klammern entkommen kann. Ich bekomme immer ICE03: Ungültige Formatzeichenfolge. Kann jemand diese Umgebungsvariable benutzen? – Dan

13

Alternative SetProperty element verwenden - es wird effektiv benutzerdefinierte Aktion Typ 51 erstellen. Es ist einfacher als benutzerdefinierte Aktion zu verwenden, da Sie den Zeitplan dafür nicht separat angeben müssen - alles geschieht in einem Element. In meinem Beispiel unten setze ich die Eigenschaft nur dann, wenn sie leer ist, d. H. Nicht von der Befehlszeile übergeben wurde.

Beispiel:

<SetProperty Id="PROP_MYSOME" 
      Before="InstallInitialize" 
      Sequence="execute" 
      Value="[%USERDOMAIN]"> 
    <![CDATA[NOT Installed AND PROP_MYSOME=""]]> 
</SetProperty> 
0

In meinem Fall, ich suche das USERPROFILE-Umgebungsvariable der Zielmaschine, um alle dort die Dateien zu installieren. Ich erreichte das wie:

<Property Id="HOME_FOLDER" > 
    <DirectorySearch Id="userProfileSearch" Depth="0" Path="[%USERPROFILE]" /> 
</Property> 

Dann gingen alle Dateien dorthin, wo ich wollte, dass sie gehen.

2

da ich einen Kommentar noch kippe hinzufügen, in Bezug auf @ Demp Antwort, ich hatte dies zu tun, um den Zustand zu erhalten, irgendwann während der Initialisierung zu bewerten, so dass der Wert in einem UI-Dialog angezeigt werden:

<SetProperty Id="MY_PROPERTY" Value="[%USERDOMAIN]" After="LaunchConditions" Sequence="first" /> 

I glaube, dass Before="InstallInitialize" passiert, bevor die Installation selbst (dh Kopieren von Dateien und whatnot) und nicht während der Initialisierungsphase des Installers selbst passiert.

Verwandte Themen