Извлечь содержимое загрузочного бутстрапа

У меня есть пакет msi, связанный с загрузочным загрузчиком wix. Могу ли я извлечь этот msi из пакета на целевой машине?

Ответ 1

Вам нужно использовать утилиту dark.exe, которая поставляется с WiX.

dark.exe -x temp <installer>

Ответ 2

Пакет не может самораспаковываться, пока кто-то не реализует эту функцию.

Ответ 3

Вы можете извлечь встроенный .msi из своего пакета во время его запуска, если вы используете специальное приложение для загрузки, затем извлеките содержимое этого .msi с помощью WiX SDK.

Короткий ответ: вы можете использовать класс Unbinder для извлечения файлов MSI из вашего пакета:

unbinder = new Unbinder();
unbinder.Unbind(bundlePath, OutputType.Bundle, tmpFolder);
unbinder.DeleteTempFiles();

Затем используйте класс InstallPackge для извлечения файлов:

using (var msiPackage = new InstallPackage(msiFilePath, DatabaseOpenMode.Transact) { WorkingDirectory = _targetFolder })
{
  using (var session = Microsoft.Deployment.WindowsInstaller.Installer.OpenPackage(msiPackage, ignoreMachineState: true))
  {
     msiPackage.ExtractFiles(fileKeysToInstall);
  }
  msiPackage.Close()
}

Это очень упрощенная версия того, что вам нужно сделать. Я написал сообщение в блоге с гораздо более подробной информацией, которую вы можете найти здесь: http://www.wrightfully.com/extracting-msi-files-without-running-the-installer

Важное примечание. Это не выполняет никаких ваших пользовательских действий, поэтому обязательно учитывайте это.