Как извлечь Wix bootstrapper embedded msi перед фактическим запуском установки?

I was able to use the System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;and Ubinder to extract itself.

Но в Wix 3.10.3 stable BA просто извлекает папку slim ba.exeto temp, а затем переключится на запуск slimba.exe, в котором нет msi. Извлечение себя не будет работать. Пока я все еще не могу получить первый запуск полныйba.exe, так как он уже закрыт.

Если есть какое-либо свойство, которое я могу получить из BootstrapperApplicationкласса, чтобы указать полное ba.exe(оно должно иметь некоторую трассировку, так как msi должен быть извлечен, когда он начинает устанавливать) или я могу вызвать извлечение, прежде чем он начнет устанавливать msi?

1 ответ

  1. Используя Unbinderкласс, можно извлечь встроенный MSIs в рабочую папку. Примечание это работает только при использовании встроенного MSIs для вашего пакета.

    Я включил код ниже, который требует, чтобы вы предоставили путь к исполняемому файлу пакета (который отличается от ba.исполняемый.) Я написал, как я это сделал в своем блоге, который вы можете посмотреть здесь:
    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();
        }