2017-11-27 12 views
2

Wir verwenden Wix V3.11, um ein MSI-Setup für unsere C# -Anwendung zu erstellen. Wir haben eine 32 Bit und eine 64 Bit Build für jede Version:Wie kann ich eine Update-Bedingung verwenden, um Variablen in Wix zu setzen?

Der vorinstallierte Installationspfad für die 32 Bit Build ist: 'C: \ Programme (x86)'.

Der vorinstallierte Installationspfad für das 64 Bit Setup ist: 'C: \ Programme'.

Wir verwenden die folgende Erklärung die Pfade zu setzen:

<?define bitness = $(var.Platform) ?> 
<?if $(var.Platform) = "x86" ?> 
<?define ProgramFilesPath = ProgramFilesFolder?> 
    <?define Win64 = no?> 
<?else?> 
<?define ProgramFilesPath = ProgramFiles64Folder?> 
    <?define Win64 = yes?> 
<?endif?> 

die Variable hier:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="$(var.ProgramFilesPath)" Name="$(var.ProgramFilesPath)"> 

     [... more folder ...] 

    </Directory> 
</Directory> 

Das Problem: Wenn die Verbraucher den Weg für die erste Installation zum Beispiel ändern 'C:/MyFolder' und führt eine Aktualisierung aus, dann verschiebt die msi-Einrichtung die Software zu 'C: \ Programme (x86)' oder 'C: \ Programme'.

Frage: Wie kann ich den benutzerdefinierten Installationspfad 'C:/MyFolder' der ersten Installation auf einem Update halten? Vielleicht gibt es irgendeine Update-Bedingung, die ich verwenden kann? Meine Phantasie:

<?define bitness = $(var.Platform) ?> 
<?if UPDATE ?> <!-- here --> 
    <?if $(var.Platform) = "x86" ?> 
    <?define ProgramFilesPath = ProgramFilesFolder?> 
     <?define Win64 = no?> 
    <?else?> 
    <?define ProgramFilesPath = ProgramFiles64Folder?> 
     <?define Win64 = yes?> 
    <?endif?> 
<?endif?> 

Antwort

0

Nehmen wir an, dass von „update“ Sie ein wichtiges Upgrade bedeuten, weil es extrem seltsam wäre, wenn ein Patch oder kleines Update alle von einem Ort zum anderen die Dateien verschoben.

Wenn Sie den üblichen WiX-Eigenschaftsnamen verwenden, ist das vom Benutzer gewählte Verzeichnis INSTALLFOLDER, obwohl nicht klar ist, ob Sie dieses oder TARGETDIR verwenden. Im Grunde können Sie die endgültige Wahl des Benutzers in einem Registrierungselement speichern (oder verwenden Sie das WiX-Muster "remember property"). Bei einem größeren Upgrade können Sie diese Eigenschaft abrufen und Ihren INSTALLFOLDER-Wert auf dieses Verzeichnis setzen, unter der Bedingung, dass WIX_UPGRADE_DETECTED festgelegt ist (die Standardeigenschafts-ID, die im Hauptaktualisierungselement verwendet wird). Vermutlich werden Sie auch den Browse-Dialog unterdrücken, mit dem der Benutzer den Ordner auswählen kann.

Having said that:

  1. Es ist nicht klar, warum Sie das große Upgrade auf eine neue Position nicht der Benutzer installiert werden sollen, wenn sie wollen, wenn die App weiter zu arbeiten.

  2. Diese Standardordner sind nicht wirklich vorbelegt - sie sind nur die Standardvorgaben. Sie sind die empfohlenen Standorte, daher ist es möglicherweise besser, sie aufgrund der Möglichkeiten für unerwartetes Verhalten nicht zu ändern. Wenn Sie beispielsweise versuchen, das 32-Bit-MSI im Ordner für systemeigene Programmdateien auf einem x64-System zu installieren, führt dies zu einer Umleitung zum Speicherort der Programmdateien (x86), was den Benutzer überraschen kann.

Verwandte Themen