如何在自定义引导程序中从链接的MSI获取错误信息

本文关键字:链接 MSI 取错误信息 自定义 引导程序 | 更新日期: 2023-09-27 18:05:10

如果我有一个错误配置的MSI(例如util:XmlFile元素上的XPath不正确),并且我只运行MSI,我会得到一个很好的描述性错误,说明我做错了什么(无法在路径X找到元素…),然后它回滚安装并进入结束屏幕。

如果我现在运行该MSI作为自定义BA的一部分,我将丢失此错误信息。我在ExecutePackageComplete的处理程序中尝试了以下操作:

string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;

但这让我想到了一些关于管道的东西。

string errorMessage = new Win32Exception(e.Status).Message;

给出"发生了致命错误"(或类似的东西)。

我想有完整的描述性错误信息,这样就更容易调试故障,而不必自己运行MSI。如何在自定义BA中获得该错误消息?

如何在自定义引导程序中从链接的MSI获取错误信息

BootstrapperApplicaton对象上有一个名为Error的事件。这会引发链接msi的错误(我确信除了其他事情之外)。

有用的错误信息在其事件参数的ErrorMessage属性中:

    private void HandleError(object sender, ErrorEventArgs e)
    {
        string errorMessage = e.ErrorMessage;
    }

引起错误的包也在PackageId属性中