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.

1voto

Cheeso Punkte 184210

Beheben Sie den ProgressDlg, damit er ordnungsgemäß angezeigt wird.

Ich habe die Schriftgröße meines Installationsprogramms von 8 auf 10 erhöht, um die Schrift auf hochauflösenden Monitoren in einem menschlicheren, nutzbaren Maßstab darzustellen. Ich mache das mit diesem XML-Zauber:

Doch dadurch wird der ProgressDlg nicht mehr ordnungsgemäß angezeigt. Dies ist der Dialog, der den Installationsfortschritt ganz am Ende anzeigt. Der ActionText wird abgeschnitten, sodass Unterlängen von Buchstaben wie g und j nicht dargestellt werden. Beheben Sie dies, indem Sie die Größe und Position der verschiedenen Steuerelemente im Progressdialog in einem Nachbearbeitungs-Javascript anpassen. Führen Sie dieses Skript nach der Erstellung der MSI aus:

var msiOpenDatabaseModeTransact = 1;
var filespec = WScript.Arguments(0);
var installer = new ActiveXObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);

// Der Text auf dem Exit-Dialog ist zu nah am Titel. Dieser 
// Schritt verschiebt den Text von Y=70 auf Y=90, etwa eine Zeile.
sql = "UPDATE `Control` SET `Control`.`Y` = '90' " +
    "WHERE `Control`.`Dialog_`='ExitDialog' AND `Control`.`Control`='Description'";
view = database.OpenView(sql);
view.Execute();
view.Close();

// Die Fortschrittsleiste ist zu nah am Status-Text auf dem Fortschrittsdialog. 
// Dieser Schritt verschiebt die Fortschrittsleiste von Y=115 auf Y=118, etwa 1/3 Zeile.
sql = "UPDATE `Control` SET `Control`.`Y` = '118' " +
    "WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='ProgressBar'";
view = database.OpenView(sql);
view.Execute();
view.Close();

// Die StatusLabel- und ActionText-Steuerelemente sind zu kurz im Fortschrittsdialog,
// sodass der untere Teil des Textes abgeschnitten wird. Dieser Schritt
// erhöht die Höhe von 10 auf 16.
sql = "UPDATE `Control` SET `Control`.`Height` = '16' " +
    "WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='StatusLabel'";
view = database.OpenView(sql);
view.Execute();
view.Close();
sql = "UPDATE `Control` SET `Control`.`Height` = '16' " +
    "WHERE `Control`.`Dialog_`='ProgressDlg' AND `Control`.`Control`='ActionText'";
view = database.OpenView(sql);
view.Execute();
view.Close();

database.Commit();

0 Stimmen

Manchmal ist es eine unschätzbare Fähigkeit, Dialogsteuerelemente direkt in den MSI-Tabellen zu aktualisieren. Aber ist das wirklich eine gute Praxis? Ich halte es für völlig unklar für jeden, der Ihren Code später verwenden wird. Ist es nicht einfacher, Ihre eigene Benutzeroberflachenabfolge mit benutzerdefinierten Dialogfeldern zu erstellen? Und viel geradliniger und lesbarer.

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