Pour le document, recherchez Session.Message.
Pour émettre des messages dans le journal MSI à partir d'une action personnalisée Javascript, suivez ce code boilerplate:
//
// 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();
}
Je reçois une exception sur la méthode LogException - plus précisément la ligne record.StringData (0). Il se lit comme suit: Erreur d'exécution Microsoft JScript: Objet attendu Ligne 134, Colonne 3, J'ai vérifié que l'enregistrement n'est pas nul, mais il échoue toujours sur cette ligne. Une idée? – tronda
Courez-vous le script dans le MSI? Si c'est le cas, vérifiez le journal MSI, que vous pouvez produire en exécutant 'msiexec/i MYMSI.msi/l * v msilog.txt'. Le journal est stocké dans msilog.txt. Je suppose que vous pourriez manquer la fonction decimalToHexString. Je viens d'ajouter cela ci-dessus. – Cheeso
Merci Cheeso pour avoir posté la réponse extrêmement utile ci-dessus! Il convient de noter qu'une référence explicite à la fonction de point d'entrée (ici MyCustomActionInJavascript) doit être faite dans le fichier MSI. Lorsque vous utilisez WiX, cela signifie que l'attribut JScriptCall doit être défini sur le nom de la fonction de point d'entrée. Cela peut sembler trivial, mais j'ai perdu quelques heures avec ça ... – YitzikC