264 Stimmen

WiX Tricks und Tipps

Wir verwenden schon seit einiger Zeit WiX und trotz der üblichen Schwierigkeiten bei der Benutzerfreundlichkeit läuft es recht gut. Was ich suche, sind nützliche Ratschläge zu folgenden Themen:

  • Einrichten eines WiX-Projekts (Layout, Verweise, Dateimuster)
  • WiX in Lösungen und Build-/Release-Prozesse integrieren
  • Installationsprogramme für neue Installationen und Upgrades konfigurieren
  • Irgendwelche nützlichen WiX-Tricks, die Sie teilen möchten

0 Stimmen

Blicken Sie sich gui4wix.codeplex.com an

10 Stimmen

Als nicht konstruktiv geschlossen? Ich habe eine Menge gelernt, indem ich diese Frage gestellt habe! Ein wenig Konsistenz von StackOverflow wäre auch schön...z.B. stackoverflow.com/questions/550632/…

15 Stimmen

Es bekam '203' Likes, das reicht aus, um seine Nützlichkeit zu beweisen.

12voto

Wim Coenen Punkte 64891

Verzeichnis-Aliase

Die Fragment der Component-Gruppe brauchen nichts über Verzeichnisse zu wissen, die im Hauptprodukt wxs definiert sind. In Ihrem Component-Gruppen-Fragment können Sie über einen Ordner so sprechen:

...

Dann kann das Hauptprodukt einen seiner Verzeichnisse (z.B. "productInstallFolder") so benennen:

Abhängigkeitsgraph

ComponentGroup-Elemente können ComponentGroupRef-Unterelemente enthalten. Das ist großartig, wenn Sie einen großen Pool von wiederverwendbaren Komponenten mit einem komplexen Abhängigkeitsgraphen zwischen ihnen haben. Sie richten einfach eine ComponentGroup in ihrem eigenen Fragment für jede Komponente ein und deklarieren die Abhängigkeiten so:

Wenn Sie jetzt die ComponentGroup "B" in Ihrem Setup referenzieren, weil es eine direkte Abhängigkeit Ihrer Anwendung ist, wird automatisch die ComponentGroup "A" mit eingezogen, auch wenn der Anwendungsautor nie realisiert hat, dass es eine Abhängigkeit von "B" war. Es "funktioniert einfach", solange Sie keine zirkulären Abhängigkeiten haben.

Wiederverwendbare wixlib

Die obige Idee des Abhängigkeitsgraphen funktioniert am besten, wenn Sie den großen Pool von wiederverwendbaren Komponenten in eine wiederverwendbare wixlib mit lit.exe kompilieren. Bei der Erstellung eines Anwendungssetups können Sie diese wixlib ähnlich wie eine wixobj-Datei referenzieren. Der candle.exe-Linker eliminiert automatisch alle Fragmente, die nicht von der Hauptprodukt-wxs-Datei(en) "mitgezogen" werden.

9voto

Robert P Punkte 15442

Einschließlich COM-Objekten:

heat erstellt alle (meistens, wenn nicht alle) benötigten Registrierungseinträge und andere Konfigurationen für sie. Jubeln Sie!

Einschließlich verwalteter COM-Objekte (auch bekannt als .NET- oder C#-COM-Objekte)

Die Verwendung von heat für ein verwaltetes COM-Objekt liefert Ihnen ein nahezu vollständiges Wix-Dokument.

Wenn Sie die Bibliothek nicht im GAC verfügbar benötigen (d. h. global verfügbar: In den meisten Fällen benötigen Sie dies sowieso nicht bei Ihren .NET-Assemblys - an dieser Stelle haben Sie wahrscheinlich etwas falsch gemacht, wenn es nicht zur gemeinsamen Bibliothek bestimmt ist), stellen Sie sicher, dass der Registrierungsschlüssel CodeBase auf [#ComponentName] aktualisiert wird. Wenn Sie planen, sie im GAC zu installieren (z. B. haben Sie eine neue beeindruckende gemeinsame Bibliothek erstellt, die jeder verwenden möchte), müssen Sie diesen Eintrag entfernen und zwei neue Attribute zum File-Element hinzufügen: Assembly und KeyPath. Das Assembly-Attribut sollte auf ".net" und das KeyPath-Attribut auf "yes" gesetzt werden.

Einige Umgebungen (insbesondere alles mit verwaltetem Speicher wie Skriptsprachen) benötigen möglicherweise ebenfalls Zugriff auf die Typelib. Stellen Sie sicher, dass Sie heat auf Ihre Typelib ausführen und diese einbeziehen. heat erstellt alle benötigten Registrierungsschlüssel. Wie cool ist das?

8voto

gehho Punkte 8815

Installation in C:\ProductName

Einige Anwendungen müssen in C:\ProductName oder etwas Ähnliches installiert werden. Aber 99,9% (wenn nicht 100%) der Beispiele im Netz installieren in C:\Program Files\CompanyName\ProductName.

Folgender Code kann verwendet werden, um die Eigenschaft TARGETDIR auf das Stammverzeichnis des Laufwerks C: zu setzen (entnommen aus der WiX-Benutzerliste):

        TARGETDIR=""

        TARGETDIR=""

HINWEIS: Standardmäßig zeigt TARGETDIR nicht auf C:\! Es zeigt stattdessen auf ROOTDRIVE, das wiederum auf das Stammverzeichnis des Laufwerks mit dem meisten freien Speicherplatz zeigt (siehe hier) - und dies ist nicht zwangsläufig das Laufwerk C:. Es könnte ein weiteres Festplattenlaufwerk, eine Partition oder ein USB-Laufwerk sein!

Dann, irgendwo unterhalb Ihres Tags, benötigen Sie die folgenden Verzeichnistags wie gewohnt:

0 Stimmen

Wäre es nicht einfacher, einfach auf WindowsVolume zu installieren?

1 Stimmen

Ja, aber du müsstest eine Umgehungslösung verwenden, da die WindowsVolume-Eigenschaft möglicherweise nicht als Directory verwendet werden kann (der Compiler gibt einen Fehler/Hinweis), wie hier und hier darauf hingewiesen wird. Persönlich finde ich diese Umgehungslösung verwirrend.

7voto

Robert P Punkte 15442

Umweltvariablen

Beim Kompilieren Ihrer Wxs-Dokumente in Wixobj-Code können Sie Umgebungsvariablen verwenden, um verschiedene Informationen zu bestimmen. Zum Beispiel, nehmen wir mal an, Sie möchten ändern, welche Dateien in ein Projekt aufgenommen werden. Angenommen, Sie haben eine Umgebungsvariable namens RELEASE_MODE, die Sie kurz vor dem Erstellen Ihrer MSI festlegen (entweder mit einem Skript oder manuell, es spielt keine Rolle). In Ihrer Wix-Quelle könnten Sie dann folgendes tun:

und später in Ihrem Code verwenden Sie es, um Ihr wxs-Dokument dynamisch zu ändern, z. B.:

1 Stimmen

Auch Kompilationsvariablen wie $(Konfiguration) und $(Plattform) sind verfügbar. Außerdem eine Menge mehr unter msdn.microsoft.com/de-de/library/aa302186.aspx

1 Stimmen

@Si - Irgendwann vor heute ist dieser Link nicht mehr aktiv. Ich konnte den neuesten nicht finden.

7voto

user432758 Punkte 86

Bearbeiten von Dialogfeldern

Eine gute Möglichkeit, Dialogfelder zu bearbeiten, besteht darin, SharpDevelop in der Version 4.0.1.7090 (oder höher) zu verwenden. Mit Hilfe dieses Tools kann ein eigenständiges Dialogfeld (wxs-Dateien aus WiX-Quellen wie z. B. InstallDirDlg.wxs) im Entwurfsmodus geöffnet, angezeigt und bearbeitet werden.

0 Stimmen

Toll, wusste nicht, dass SharpDevelop dies unterstützt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X