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.

157voto

si618 Punkte 16160
  1. Variablen in einer separaten wxi Include-Datei speichern. Ermöglicht die Wiederverwendung, Variablen sind schneller zu finden und (bei Bedarf) ermöglicht eine einfachere Manipulation durch ein externes Tool.

  2. Plattformvariablen für x86- und x64-Builds definieren

  3. Den Installationsort in der Registrierung speichern, um Upgrades den korrekten Speicherort finden zu lassen. Beispielsweise, wenn ein Benutzer ein benutzerdefiniertes Installationsverzeichnis festlegt.

    Anmerkung: Der WiX-Guru Rob Mensching hat einen exzellenten Blog-Eintrag veröffentlicht, der weitere Details enthält und einen Sonderfall behebt, wenn Eigenschaften über die Befehlszeile gesetzt werden.

    Beispiele mit 1., 2. und 3.

    und

  4. Der einfachste Ansatz besteht immer darin, Hauptupgrades durchzuführen, da dies sowohl neue Installationen als auch Upgrades in einer einzigen MSI ermöglicht. Der UpgradeCode ist auf eine eindeutige GUID festgelegt und ändert sich nie, es sei denn, wir möchten das vorhandene Produkt nicht aktualisieren.

    Anmerkung: In WiX 3.5 gibt es ein neues MajorUpgrade-Element, das das Leben noch einfacher macht!

  5. Erstellen eines Icons in der Liste der installierten Programme

  6. Bei Freigabe-Builds versionieren wir unsere Installer und kopieren die MSI-Datei in ein Bereitstellungsverzeichnis. Ein Beispiel dafür ist die Verwendung eines wixproj-Ziels, das vom AfterBuild-Ziel aufgerufen wird:

  7. Verwenden Sie heat, um Dateien mit Platzhaltern (*) GUID zu sammeln. Nützlich, wenn Sie WXS-Dateien über mehrere Projekte hinweg wiederverwenden möchten (siehe meine Antwort zu mehreren Versionen desselben Produkts). Zum Beispiel sammelt dieses Batch-Skript automatisch RoboHelp-Ausgaben.

    @echo off  
    robocopy ..\WebHelp "%TEMP%\WebHelpTemp\WebHelp" /E /NP /PURGE /XD .svn  
    "%WIX%bin\heat" dir "%TEMP%\WebHelp" -nologo -sfrag -suid -ag -srd -dir WebHelp -out WebHelp.wxs -cg WebHelpComponent -dr INSTALLLOCATION -var var.WebDeploySourceDir 

    Einiges passiert hier, robocopy entfernt Metadaten des Subversion-Arbeitskopfs vor dem Sammeln; der -dr Root-Verzeichnisverweis ist auf unseren Installationsort gesetzt, anstelle von TARGETDIR; -var wird verwendet, um eine Variable zur Spezifizierung des Quellverzeichnisses zu erstellen (Web-Bereitstellungsausgabe).

  8. Einfacher Weg, um die Produktversion im Titel des Begrüßungsdialogs über Strings.wxl für die Lokalisierung einzuschließen. (Kredit: saschabeaumont. Hinzugefügt, da dieser großartige Tipp in einem Kommentar versteckt ist)

        {\WixUI_Font_Bigger}Willkommen beim [ProductName] [ProductVersion] Setup-Assistent
  9. Vermeiden Sie Schmerzen und befolgen Sie den Rat von Wim Coehen von einer Komponente pro Datei. Dies ermöglicht es Ihnen auch, die Komponenten-GUID auszulassen oder zu wild zu verwendenden.

  10. Rob Mensching hat einen cleveren Weg gefunden, um Probleme in MSI-Protokolldateien schnell aufzuspüren, indem er nach value 3 sucht. Beachten Sie die Kommentare zur Internationalisierung.

  11. Bei der Hinzufügung von bedingten Features ist es intuitiver, das Standard-Feature-Level auf 0 (deaktiviert) zu setzen und dann das Bedingungslevel auf den gewünschten Wert festzulegen. Wenn Sie das Standard-Feature-Level auf >= 1 setzen, muss das Bedingungslevel 0 betragen, um es zu deaktivieren, was bedeutet, dass die Bedingungslogik das Gegenteil von dem sein muss, was Sie erwarten würden, was verwirrend sein kann :)

      NOT UPGRADEFOUND
    
      UPGRADEFOUND

0 Stimmen

Über das Hinzufügen des Symbols in den Hinzufügen/Entfernen-Programmen war genau das, wonach ich gesucht habe. Wo klebst du diese drei Zeilen ein? +1 für die reine Brillanz.

0 Stimmen

Ich pflege, sie direkt nach (und offensichtlich unterhalb) des -Elements zu platzieren. Überprüfen Sie das Schema auf Gültigkeit wix.sourceforge.net/manual-wix3/schema_index.htm

0 Stimmen

+1, ich wünschte, ich könnte +100 machen, das ist die mit Abstand nützlichste Information über Wix, auf die ich gestoßen bin.

38voto

Simon Steele Punkte 11468

Überprüfen, ob IIS installiert ist:

    Installed OR IIS_MAJOR_VERSION

Überprüfen, ob die IIS 6 Metabase-Kompatibilität auf Vista+ installiert ist:

    Installed OR ((VersionNT < 600) OR IIS_METABASE_COMPAT)

34voto

Cheeso Punkte 184210

Halten Sie alle IDs in separaten Namensräumen

  • Features beginnen mit F. Beispiele: F.Dokumentation, F.Binärdateien, F.Beispielcode.
  • Komponenten beginnen mit C. z.B.: C.ChmDatei, C.ReleaseNotes, C.Lizenzdatei, C.IniDatei, C.Registry
  • Benutzerdefinierte Aktionen sind CA. z.B.: CA.LaunchHelp, CA.UpdateReadyDlg, CA.SetPropertyX
  • Dateien sind Fi.
  • Verzeichnisse sind Di.
  • und so weiter.

I find this helps immensely in keeping track of all the various id's in all the various categories.

0 Stimmen

Ich verwende keine Namenräume, aber ich füge die IDs hinzu; zum Beispiel: ExamplesFeature, ChmFileComponent. Ich denke, ich liebe es zu tippen ;-)

25voto

Peter Tate Punkte 2168

Fantastische Frage. Ich würde gerne einige bewährte Verfahren sehen.

Ich habe viele Dateien, die ich verteile, daher habe ich mein Projekt in mehrere wxs-Quelldateien aufgeteilt.

Ich habe eine Quelldatei auf oberster Ebene, die ich Product.wxs nenne, die im Grunde die Struktur für die Installation enthält, aber nicht die tatsächlichen Komponenten. Diese Datei hat mehrere Abschnitte:

    ... 
   s ...

        ...

       Eine Menge davon

Die restlichen .wix-Dateien bestehen aus Fragmenten, die ComponentGroups enthalten, die im Feature-Tag in der Product.wxs referenziert werden. Mein Projekt enthält eine schöne logische Gruppierung der Dateien, die ich verteile

     ....

Das ist nicht perfekt, mein OO-Spinnensinn kribbelt ein wenig, weil die Fragmente Namen in der Product.wxs-Datei referenzieren müssen (z.B. der DirectoryRef), aber ich finde es einfacher zu pflegen als eine einzige große Quelldatei.

Ich würde gerne Kommentare dazu hören oder ob jemand gute Tipps hat!

0 Stimmen

Unser Setup ist auch sehr ähnlich diesem Ansatz. Es ist gut, weil wir unser Pendant zu Products.wxs als unser Basissetup für eine Vielzahl von Produkten verwenden können.

0 Stimmen

@Peter Tate: Dein Spinnensinn hat recht. Siehe meine Antwort zum Verzeichnis-Alias.

0 Stimmen

Ich gehe genauso vor: Product.wxs mit Layout ist statisch, und eine Build-Aufgabe (heat.exe) generiert meine Content.wxs-Datei.

20voto

Cheeso Punkte 184210

Fügen Sie dem Exit-Dialog ein Kontrollkästchen hinzu, um die App oder die Hilfedatei zu starten.

...

  WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT

Wenn Sie es auf diese Weise tun, ist das "Standard"-Erscheinungsbild nicht ganz richtig. Das Kontrollkästchen hat immer einen grauen Hintergrund, während der Dialog weiß ist:

alternativer Text http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_1.gif

Ein Weg, dies zu umgehen, besteht darin, einen eigenen benutzerdefinierten ExitDialog anzugeben, mit einem anders platzierten Kontrollkästchen. Dies funktioniert, erscheint aber als viel Arbeit, nur um die Farbe einer Steuerung zu ändern. Eine andere Möglichkeit, dasselbe zu lösen, besteht darin, das generierte MSI nachträglich zu bearbeiten, um die X-,Y-Felder in der Steuertabelle für diese bestimmte CheckBox-Steuerung zu ändern. Der JavaScript-Code sieht so aus:

var msiOpenDatabaseModeTransact = 1;
var filespec = WScript.Arguments(0);
var installer = new ActiveXObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);
var sql = "UPDATE `Control` SET `Control`.`Height` = '18', `Control`.`Width` = '170'," +
          " `Control`.`Y`='243', `Control`.`X`='10' " +
          "WHERE `Control`.`Dialog_`='ExitDialog' AND " + 
          "  `Control`.`Control`='OptionalCheckBox'";
var view = database.OpenView(sql);
view.Execute();
view.Close();
database.Commit();

Das Ausführen dieses Codes als Befehlszeilenskript (mit cscript.exe) nachdem das MSI generiert wurde (von light.exe) führt zu einem ExitDialog, der professioneller aussieht:

alternativer Text http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/images/exit_dlg_2.gif

0 Stimmen

Ha! Nicht mein Blog. Ich habe es auch gelesen. Und ich habe einen Link zum Blog-Eintrag im obigen Text. Aber sie haben es anders gemacht als ich. Ich mag meine Art besser.!!

1 Stimmen

Vielen Dank für das js, sehr hilfreich! Eine Sache, die ich im wxs ändern musste, war das Ersetzen von WIXUI_EXITDIALOGOPTIONALCHECKBOX durch WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 und NICHT Installiert innerhalb von

0 Stimmen

Gibt es eine Möglichkeit, das Kontrollkästchen standardmäßig ausgewählt zu machen?

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