如何调试在 Javascript 中实现的 MSI 自定义操作? [英] How to debug an MSI Custom Action that is implemented in Javascript?
本文介绍了如何调试在 Javascript 中实现的 MSI 自定义操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我很难弄清楚我的 Javascript 自定义操作失败的原因.
I'm having difficulty figuring out why my Javascript Custom action is failing.
我以为我在 WIX.chm 文件中看到了一个关于调试的主题;现在我找不到它.
I thought I saw a topic in the WIX.chm file on debugging; now I cannot find it.
第一季度
是否有关于如何调试 Javascript 或 VBScript 自定义操作的文档?
Q1
is there doc on how to debug Javascript or VBScript custom actions?
第二季度
有没有办法从自定义操作向 MSI 日志发出一些东西?
Q2
Is there a way to emit something into the MSI log from a custom action?
附录:
有些人认为脚本是编写 CA 的错误工具.
我不同意.我认为 Javascript 是一个非常好的工作工具.
推荐答案
有关文档,请查找 Session.Message.
要从 Javascript 自定义操作向 MSI 日志发送消息,请遵循以下样板代码:
To emit messages into the MSI log from a Javascript Custom Action, follow this boilerplate code:
//
// 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();
}
这篇关于如何调试在 Javascript 中实现的 MSI 自定义操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文