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.

7voto

Erstellen einer benutzerdefinierten Aktion für WIX in verwaltetem Code (C#) ohne Votive

http://www.codeproject.com/KB/install/wixcustomaction.aspx

7voto

BozoJoe Punkte 5809

Verwendung des RobM speziellen "Remember Property" Musters

http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern

6voto

EdmundYeung99 Punkte 2393

Einstellen des IIS enable32BitAppOnWin64-Flags http://trycatchfail.com/blog/post/WiX-Snippet-change-enable32BitAppOnWin64.aspx

     = 600]]>

5voto

Cheeso Punkte 184210

Ändern Sie den Dialog "Bereit zur Installation?" (auch bekannt als VerifyReadyDlg), um eine Zusammenfassung der getroffenen Entscheidungen bereitzustellen.

Es sieht so aus:
alt text http://i46.tinypic.com/s4th7t.jpg

Führen Sie dies mit einem Javascript-CustomAction aus:


Javascript-Code:

// http://msdn.microsoft.com/en-us/library/aa372516(VS.85).aspx
var MsiViewModify = 
    {
        Refresh          : 0,
        Insert           : 1,
        Update           : 2,
        Assign           : 3,
        Replace          : 4,
        Merge            : 5,
        Delete           : 6,
        InsertTemporary  : 7,   // kann das MSI während der Installation nicht permanent ändern
        Validate         : 8,
        ValidateNew      : 9,
        ValidateField    : 10,
        ValidateDelete   : 11
    };

// http://msdn.microsoft.com/en-us/library/sfw6660x(VS.85).aspx
var Buttons = 
    {
        OkOnly           : 0,
        OkCancel         : 1,
        AbortRetryIgnore : 2,
        YesNoCancel      : 3
    };

var Icons= 
    {
        Critical         : 16,
        Question         : 32,
        Exclamation      : 48,
        Information      : 64
    }

var MsgKind =
    {
        Error            : 0x01000000,
        Warning          : 0x02000000,
        User             : 0x03000000,
        Log              : 0x04000000
    };

// http://msdn.microsoft.com/en-us/library/aa371254(VS.85).aspx
var MsiActionStatus = 
    {
        None             : 0,
        Ok               : 1, // Erfolg
        Cancel           : 2,
        Abort            : 3,
        Retry            : 4, // auch Suspend genannt?
        Ignore           : 5  // überspringt restliche Aktionen; dies ist kein Fehler.
    };

function UpdateReadyDialog_CA(sitename)
{
    try 
    {
        // Eigenschaften aus der Installationsitzung können wie folgt abgerufen werden:
        var selectedWebSiteId = Session.Property("MSI_PROPERTY_HERE");

        // Angeforderten Feature-Installationsstatus können wie folgt abgerufen werden:
        var fInstallRequested   = Session.FeatureRequestState("F.FeatureName");

        var text1 = "Dies ist Zeile 1 des Textes im VerifyReadyDlg";

        var text2 = "Dies ist die zweite Zeile des benutzerdefinierten Textes";

        var controlView     = Session.Database.OpenView("SELECT * FROM Control");
        controlView.Execute();

        var rec             = Session.Installer.CreateRecord(12);
        rec.StringData(1)   = "VerifyReadyDlg";    // Dialog_
        rec.StringData(2)   = "CustomVerifyText1"; // Control - kann jeder Name sein
        rec.StringData(3)   = "Text";              // Typ
        rec.IntegerData(4)  = 25;                  // X
        rec.IntegerData(5)  = 60;                  // Y
        rec.IntegerData(6)  = 320;                 // Breite
        rec.IntegerData(7)  = 85;                  // Höhe
        rec.IntegerData(8)  = 2;                   // Attribute
        rec.StringData(9)   = "";                  // Eigenschaft
        rec.StringData(10)  = vText1;              // Text
        rec.StringData(11)  = "";                  // Control_Next
        rec.StringData(12)  = "";                  // Hilfe
        controlView.Modify(MsiViewModify.InsertTemporary, rec);

        rec                 = Session.Installer.CreateRecord(12);
        rec.StringData(1)   = "VerifyReadyDlg";    // Dialog_
        rec.StringData(2)   = "CustomVerifyText2"; // Control - jeder eindeutige Name
        rec.StringData(3)   = "Text";              // Typ
        rec.IntegerData(4)  = 25;                  // X
        rec.IntegerData(5)  = 160;                 // Y
        rec.IntegerData(6)  = 320;                 // Breite
        rec.IntegerData(7)  = 65;                  // Höhe
        rec.IntegerData(8)  = 2;                   // Attribute
        rec.StringData(9)   = "";                  // Eigenschaft
        rec.StringData(10)  = text2;               // Text
        rec.StringData(11)  = "";                  // Control_Next
        rec.StringData(12)  = "";                  // Hilfe
        controlView.Modify(MsiViewModify.InsertTemporary, rec);

        controlView.Close();
    }
    catch (exc1)
    {
        Session.Property("CA_EXCEPTION") = exc1.message ;
        LogException("UpdatePropsWithSelectedWebSite", exc1);
        return MsiActionStatus.Abort;
    }
    return MsiActionStatus.Ok;
}

function LogException(loc, exc)
{
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "Exception {" + loc + "}: " + exc.number + " : " + exc.message;
    Session.Message(MsgKind.Error + Icons.Critical + Buttons.btnOkOnly, record);
}

Deklarieren Sie den Javascript CA:


Hängen Sie die CA an eine Schaltfläche an. In diesem Beispiel wird die CA ausgelöst, wenn auf Weiter geklickt wird vom CustomizeDlg:


Zugehörige SO-Frage: Wie kann ich zur Laufzeit den anzuzeigenden Text in VerifyReadyDlg festlegen?

0 Stimmen

Sicherlich sollte das JScript die Skriptsprache von Windows sein und nicht JavaScript, die Skriptsprache von DHTML. Möglicherweise etwas pingelig, aber es könnte für einige Leute verwirrend sein.

5voto

k3Rn3Lp4n1C Punkte 38

Vor dem Bereitstellen eines Installationspakets überprüfe ich immer den Inhalt.

Es ist nur ein einfacher Aufruf an der Befehlszeile (gemäß Terrences Post) Öffnen Sie die Befehlszeile und geben Sie ein

msiexec /a Package.msi /qb TARGETDIR="%CD%\Extract" /l*vx "%CD\install.log%"

Dadurch werden die Inhalte des Pakets in ein Unterverzeichnis 'Extract' mit dem aktuellen Pfad extrahiert.

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