WiX自定义错误和例外

时间:2014-04-01 16:57:50

标签: c# wix custom-action custom-errors

我们正在为自定义操作实施自己的自定义错误,以帮助您登录我们的产品。我已经正确地创建了一些在构建项目时放入错误表的错误,并且我已经成功地能够正确地记录错误。我的问题是,我希望能够将异常消息(如果有的话)附加到自定义错误中,以帮助我们更好地了解出现了什么问题。

我知道我可以单独记录事件,也就是说,我可以有一个try / catch块,如果发现异常,我可以处理我们的自定义错误,之后我可以处理异常消息,就像这样;

try
{
 //My Code
}
catch (Exception ex)
{
   MsiLogging.HandleError(session, InstallerErrors.CError_IsUserAdmin);
   MsiLogging.HandleError(session, ex.Message);
   return false;
}

然后,我的日志类会像这样处理它

public class MsiLogging
{
    //Placeholder for errors without a custom error message - default error message will appear
    public static void HandleError(Session session)
    {
        HandleError(session, 25000);
    }

    public static void HandleError(Session session, int error)
    {
        Record record = new Record(2);
        record[1] = error;
        session.Message(InstallMessage.Error, record);
    }
    public static void HandleError(Session session, string message)
    {
        Record record = new Record(2);
        record.FormatString = message;
        session.Message(InstallMessage.Error, record);
    }
}

这将产生两个日志条目,一个带有我们的自定义错误(我们几乎用它来确定发生错误的方法,并帮助我们的客户与我们通信的IT管理员在发生错误时为我们提供更好的信息),以及一个带有异常消息(如果存在)。

有没有办法直接附加带有异常消息的自定义错误消息并只创建一个日志条目?这不是非常重要,但它只是我真正喜欢的事情之一。我已经尝试对Record对象使用GetString()SetString()方法,但除了崩溃我的安装程序之外,我只能过度编写自定义错误消息而不是附加到它。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

我不确切地知道你的错误表中有什么,但我怀疑你需要一个模板。您有类似错误[1]附加信息[2]的内容,然后您应该能够使用等效的MsiFormatRecord将所有信息放入一条记录中。这就是你用C ++做的事情,我假设(DTF?)库公开了等价物,用于从多个数据片段中创建一条消息。

答案 1 :(得分:0)

我能够通过实现新的MSI属性EXCEPTIONTEXT来实现它。我添加了自定义错误以包含此属性,默认情况下只读取" No Exception"。然后,我只是添加了另一个HandleError方法:

public static void HandleError(Session session, int error, string message)
{
    Record record = new Record(2);
    session["EXCEPTIONTEXT"] = message;
    session.Message(InstallMessage.Error, record);
}

通过在记录错误之前设置异常文本属性,我能够输出日志。感谢PhilDW指出我正确的方向。