2016-12-26 10 views
0

Я смог использовать System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; и Ubinder для извлечения себя.Как извлечь Wix bootstrapper встроенный msi перед фактическим запуском установки?

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

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

ответ

0

Используя класс Unbinder, вы можете извлечь встроенные 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(); 
    } 
+1

Спасибо Джон, ссылка решает мою проблему. На самом деле мне нужна строка: _bundlePath = _bootstrapperApplication.Engine.StringVariables ["WixBundleOriginalSource"]; – txiangyang