Создать MSI из извлеченных файлов установки

У меня есть папка со сторонним установщиком, папка содержит файл setup.exe и все его CAB-файлы рядом (и много связанных папок).

содержимое папки

Я хочу иметь возможность повторно упаковать этот сторонний установщик во что-то, что я могу использовать в моем основном установщике приложений в качестве предварительного условия (или в виде связанного MSI-пакета).

Я хочу не просто извлечь / скопировать эти файлы на клиентском компьютере, но запустить программу установки.

Можно ли создать MSI из всех этих файлов с помощью Installshield? Я не могу найти тип проекта, который бы это сделал.

3 ответа

Сценарий проблемы: каков ваш сценарий?

  • Вы берете на себя обработку и обновление старой установки и хотите преобразовать ее в правильный формат?
  • Вы пытаетесь перепаковать сторонний вендор setup.exe?
  • Вы пытаетесь завладеть файлами внутри CAB? Или просто извлечь файлы, чтобы их можно было повторно упаковать другим способом. По какой-то причине?
  • Вы пытаетесь установить весь шебанг так легко и надежно, как это возможно в бесшумном режиме?
  • Какой-то другой проблемный сценарий?

Тихий Бег?: Если вам нужно просто установить без вывода сообщений, то для большинства из них есть ключи командной строки setup.exe обертки, которые позволят вам сделать это, но это отличается для каждого инструмента, используемого для создания setup.exe файл. Для файлов installshield setup.exe требуется файл ответов без вывода сообщений, другие инструменты делают это по-другому. Я написал про Installshield беззвучного удаления пару дней назад. А вот фрагмент обычной установки без вывода сообщений и различных типов файлов Installshield setup.exe.

Записать файл ответов:

Setup.exe /r /f1”c:\temp\my-answer-file.iss”

Базовая установка без вывода сообщений:

Setup.exe /s /f1”c:\temp\my-answer-file.iss”

Если setup.exe является оберткой для MSI, и у вас есть система распространения, на которую можно положиться при распределении необходимых компонентов, тогда обычно лучше извлечь MSI, если вы находитесь в корпоративной среде и используете стандартные функции MSI для работы в режиме без вывода сообщений (/QN переключиться на msiexec.exe):

msiexec.exe /I "C:\Your.msi" /QN /L*V "C:\msilog.log" TRANSFORMS="C:\1031.mst;C:\My.mst"

Краткое объяснение параметров:

/I = run install sequence
/QN = run completely silently
/L*V "C:\msilog.log" = verbose logging
TRANSFORMS="C:\1031.mst;C:\My.mst" = Apply transforms 1031.mst and My.mst (see below).

Извлечение файла?: Получение файлов из setup.exe может быть сложным или очень простым. Это зависит от того, с чего он был построен, и это может быть в значительной степени "чем угодно" - от установленных инструментов развертывания до проприетарного программного обеспечения, созданного "кем угодно". Чтобы извлечь файлы из различных типов setup.exe Вы можете найти обширную информацию в этом ответе:

По сути вы используете setup.exe /stage_only для исполняемых файлов Installshield Suite. А также setup.exe /a для базовых исполняемых файлов MSI и Installscript MSI. А также setup.exe /s /extract_allдля устаревших исполняемых файлов Installscript. Разъяснения ниже.

Импорт MSI: если вам удастся извлечь файлы и вы увидите там файл MSI, то вы сможете импортировать или открыть этот файл MSI в Installshield (или других инструментах развертывания).


Я попробую быстрый "короткий список" вариантов извлечения (не уверен, что это то, что вам действительно нужно):

Уже MSI? Знаете ли вы, что это setup.exe содержит? Технически это уже может быть оболочка, содержащая файл MSI, или это может быть вывод какого-либо устаревшего инструмента развертывания, а вовсе не Windows Installer. Давайте просто перечислим несколько вариантов:

  1. Административная установка: попробуйте сделать setup.exe /a из командной строки, чтобы увидеть, если вы получаете диалоговое окно "извлечения файлов". Если это так, укажите выходное местоположение и извлеките все файлы. Это указывает на установку MSI, обернутую в setup.exe
  2. Установка Installscript: попробуйте сделать setup.exe /s /extract_all из командной строки, чтобы увидеть, если вы можете извлечь файлы из CAB. Это для установок Installscript. Или попробуй /extract_all:[path] также.
  3. Установки Installshield Suite: попробуйте сделать setup.exe /stage_only из командной строки. Много сложных деталей здесь.
  4. Расширенный установщик: попробуйте сделать setup.exe /extract "C:\My work" или же setup.exe /x
  5. WiX: попробуйте следующее из командной строки: dark.exe -x outputfolder setup.exe, Файл WiX setup.exe можно извлечь только с помощью инструмента dark.exe из самой платформы. Другими словами, вам нужно установить WiX, чтобы извлечь WiX setup.exe (на данный момент).
  6. Мудрый: Мудрый больше не продается, но многие старые настройки остаются. Вы можете попробовать извлечь файлы с setup.exe /X [path],
  7. Переупаковка. Один из способов создания пакета MSI из устаревших установщиков setup.exe - это "зафиксировать" изменения, внесенные в систему, с помощью средства переупаковки приложений, которое отслеживает изменения, внесенные в систему во время установки setup.exe. быть запущенным.

Невозможно охватить все возможные виды файлов setup.exe. Они могут содержать все виды различных ключей командной строки. Есть так много возможных инструментов, которые можно использовать. (non-MSI, MSI, admin-tools, multi-platform, так далее...).

Общие инструменты, такие как Inno Setup кажется, делает извлечение трудно ( неофициальный распаковщик, не проверенный мной, управляется virustotal). В то время как NSIS похоже, использует обычные архивы, которые может открыть стандартное программное обеспечение для архивирования.

Общие хитрости: Один из приемов - запустить setup.exe и посмотреть в 1) системной временной папке на наличие извлеченных файлов. Другой трюк заключается в том, чтобы использовать 2) 7-Zip, WinRAR, WinZip или аналогичные инструменты архивирования, чтобы посмотреть, могут ли они прочитать формат. Некоторые утверждают, что добились успеха, 3) открыв setup.exe в Visual Studio. Не техника, которую я использую.


Некоторые ссылки:

Я нуб из InstallShield, который ищет помощь в решении аналогичной проблемы, но для ваших нужд достаточно простого MSI Project.

Если вы используете мастер Project Assistant, когда вы попадаете в раздел "Файлы приложения", вы перетаскиваете свои различные папки и файл setup.exe в папку INSTALLDIR в мастере, и это, я думаю, довольно много.

Как я помню из других проблем, которые я имел при создании неинсталляционного MSI SQL Server, Install Shield автоматически распознает ваш setup.exe и запустит его при запуске MSI.

Такого рода выглядит как устаревший Installshield setup.exe ИЛИ MSI Installscript setup.exe, Несмотря на схожие внешности, это очень разные звери.

Я бы попробовал следующее, чтобы определить, с чем вы имеете дело:

setup.exe /a

Если вы получаете диалоговое окно с просьбой указать выходную папку, возможно, у вас установлен MSI-файл Installscript. Извлеките файлы и найдите MSI в выходной папке.

Если это не работает, попробуйте setup.exe /s /extract_all или же setup.exe /extract_all:[path], Или попробуйте этот ответ.


Проект Installshield Suite. Поскольку вы хотите распространять эту настройку как часть своего собственного развертывания приложения, я бы, вероятно, использовал проект Installshield Suite - если у вас есть лицензия на версию Installshield, которая поддерживает этот тип проекта. Смотрите скриншот здесь.

Silent_Install.bat файл (и связанный Silent_Uninstall.batдля удаления) должен содержать командные строки, которые необходимо использовать при вставке пакета в проект пакета. Затем вы также включаете свое собственное приложение как часть установки пакета. Удостоверьтесь, что тестирование прошло успешно во всех сценариях развертывания: установка, обновление, изменение, удаление, исправление и т. Д. Всегда есть сюрпризы.

Переупаковка: в качестве альтернативы вы можете упаковать программу установки с помощью инструмента захвата, а не запускать ее "как есть" - в существующем формате. Затем вы по существу "записываете" изменения, сделанные установкой, контролируя ее установку. Это работает в большинстве случаев, но требует значительных знаний для правильной очистки. There are also challenges for multi-lingual setups - which this appears to be, Этот подход широко использовался в корпорациях для преобразования устаревших установщиков в формат MSI - и он все еще используется. Конечным результатом является MSI, который может быть установлен в автоматическом режиме стандартным способом установщика Windows (что является надежным - гораздо больше, чем устаревший setup.exe, запускаемый в автоматическом режиме). Я бы все же обернул захваченный MSI в отдельный проект, хотя в принципе вы могли бы добавить его в MSI своего продукта. Я не рекомендовал бы это - по нескольким причинам. Наиболее важно то, что вам может потребоваться обновить настройку среды выполнения самостоятельно - без перестройки собственного MSI.

Другие вопросы по тегам