Frage

Ich habe Schwierigkeiten, herauszufinden, warum meine benutzerdefinierte Aktion von JavaScript fehlschlägt.

Ich dachte, ich habe ein Thema in der Wix.chm -Datei zum Debugging gesehen. Jetzt kann ich es nicht finden.

Q1
Gibt es DOC, wie Sie JavaScript- oder VBScript -benutzerdefinierte Aktionen debuggen?

Q2
Gibt es eine Möglichkeit, etwas aus einer benutzerdefinierten Aktion in das MSI -Protokoll auszugeben?


Nachtrag:
Einige Leute denken, Skript sei das falsche Werkzeug für das Schreiben von CAS.
Ich stimme nicht zu. Ich finde JavaScript ist ein sehr gutes Werkzeug für den Job.

War es hilfreich?

Lösung

Suchen Sie nach dem DOC nach Sitzung.Message.

Befolgen Sie diesen Boilerplate -Code, um Nachrichten aus einer benutzerdefinierten JavaScript -Aktion in das MSI -Protokoll auszugeben:

//
// CustomActions.js 
// 
// Template for WIX Custom Actions written in Javascript.
// 
// 
// Mon, 23 Nov 2009  10:54
// 
// ===================================================================


// 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, // success
        Cancel           : 2,
        Abort            : 3,
        Retry            : 4, // aka suspend?
        Ignore           : 5  // skip remaining actions; this is not an error.
};


function MyCustomActionInJavascript() {
    try {
        LogMessage("Hello from MyCustomActionInJavascript");
        // ...do work here...
        LogMessage("Goodbye from MyCustomActionInJavascript");
    }
    catch (exc1) {
        Session.Property("CA_EXCEPTION") = exc1.message ;
        LogException(exc1);
        return MsiActionStatus.Abort;
    }
    return MsiActionStatus.Ok;
}

// Pop a message box.  also spool a message into the MSI log, if it is enabled. 
function LogException(exc) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction: Exception: 0x" + decimalToHexString(exc.number) + " : " + exc.message;
    Session.Message(MsgKind.Error + Icons.Critical + Buttons.btnOkOnly, record);
}


// spool an informational message into the MSI log, if it is enabled. 
function LogMessage(msg) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction:: " + msg;
    Session.Message(MsgKind.Log, record);
}


// popup a msgbox
function AlertUser(msg) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = msg;
    Session.Message(MsgKind.User + Icons.Information + Buttons.btnOkOnly, record);
}

// Format a number as hex.  Quantities over 7ffffff will be displayed properly.
function decimalToHexString(number) {
    if (number < 0)
        number = 0xFFFFFFFF + number + 1;
    return number.toString(16).toUpperCase();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top