如何在实际 运行 安装之前提取 Wix bootstrapper embedded msi?

How to extract Wix bootstrapper embedded msi before actually run install?

我能够使用 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; 和 Ubinder 来提取自身。

但是在Wix 3.10.3 stable中,BA只是解压一个slim ba.exe到临时文件夹,然后会切换到运行没有msi的slim ba.exe它。提取本身将不起作用。虽然我仍然无法让第一个启动完整 ba.exe 因为它已经关闭了。

如果有任何 属性 我可以从 BootstrapperApplication class 指出完整的 ba.exe (它应该有一些痕迹,因为应该提取 msi当它开始安装时)或者我可以在它开始安装 msi 之前调用提取吗?

使用 Unbinder class,您可以将嵌入的 MSI 提取到工作文件夹中。请注意,这仅在您为捆绑包使用嵌入式 MSI 时才有效。

我包含了下面的代码,它要求您提供捆绑可执行文件的路径(这与 ba.exe 不同)。我已经在我的博客上写下了我是如何做到这一点的,您可以在这里查看: https://www.wrightfully.com/extracting-wix-bundled-msi-files-without-running-the-installer/

    Unbinder unbinder = null;

    try
    {
        unbinder = new Unbinder();
        //unbinder.Message += MessageEventHandlerMethod;
        unbinder.Unbind(bundlePath, OutputType.Bundle, tmpFolder);
    }
    finally
    {
        if (null != unbinder)
            unbinder.DeleteTempFiles();
    }