Извлечь MSI из EXE

Я хочу извлечь MSI-файл EXE-файла для публикации по сети.

Например, с помощью Universal Extractor, но он не работает в среде выполнения Java.


person emdadgar2    schedule 10.10.2009    source источник


Ответы (8)


7-Zip должен помочь.

С его помощью вы можете извлечь все файлы внутри EXE (то есть также файл MSI).

Хотя вы можете сделать это с помощью 7-Zip, лучший способ - это административная установка, как указано Stein Осмуль.

person Burkhard    schedule 10.10.2009
comment
@sorin, для vc_redist есть модули слияния (* .msm), которые распространяются с Visual Studio - person Andriy K; 28.10.2013
comment
Не распаковывайте файлы MSI с помощью zip, подробности см. в моем ответе ниже. - person Stein Åsmul; 04.05.2015
comment
Как уже говорили другие, использование утилиты сжатия для извлечения файлов - не лучший вариант. Приложите все усилия, чтобы выполнить «установку администратора», которая имеет много преимуществ. - person andyb; 05.04.2017

Для проектов на основе InstallShield MSI я обнаружил, что работает следующее:

setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"

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

Командная строка в основном сообщает setup.exe, что нужно попытаться удалить продукт (/ x) и сделать это в автоматическом режиме (/ s). При этом он должен извлечь MSI в определенное место (/ b).

Команда / v передает аргументы установщику Windows, в данном случае аргумент / qn. Аргумент / qn отключает любой вывод графического интерфейса программы установки.

person Daniel Dreibrodt    schedule 04.06.2014
comment
Это решение должно быть одобрено! Работает без дополнительных инструментов, setup.exe распаковывает сам! Однако использует много недокументированных параметров (не показанных в setup.exe /?). Согласно моим экспериментам, параметр / x не нужен. - person msp; 30.07.2014
comment
Я добавил параметр / x, потому что я не хотел, чтобы программное обеспечение было установлено в системе, в которой я извлекаю MSI (например, на сервере сборки). Поскольку программное обеспечение никогда не было установлено, указание параметра / x гарантирует, что установка не выполняет никаких действий, кроме извлечения файла MSI. Параметры задокументированы на странице helpnet.installshield.com/installshield18helplib/ - person Daniel Dreibrodt; 12.08.2014
comment
Вы правы насчет добавления / x. Однако, как вы упомянули, параметр / x также имеет побочные эффекты, а именно, если продукт уже установлен. Кажется, нет способа просто извлечь файл MSI без побочных эффектов. Типичный Microsoft: было бы слишком просто, если бы они добавили параметр / extract. - person msp; 12.08.2014
comment
На самом деле я просто использовал этот ответ в документации по продукту! Я немного подправил его: setup.exe /s /bC:\msidir, а затем отменил установку, когда появится мастер. Я предпочитаю это, потому что он потенциально ничего не удаляет. - person kindall; 16.11.2016
comment
@msp Microsoft сейчас делает исполняемые файлы InstallShield? Интересно :) Единственная часть, которая на самом деле является продуктом Microsoft, - это сам файл MSI - исполняемый файл InstallShield - это просто глупый способ распаковать этот файл MSI и запустить MSIExec. - person Luaan; 12.01.2017
comment
@Luaan Хорошо, я признаю, что перепутал два установщика. Для меня оба продукта просто фубарское дерьмо. ;-) - person msp; 12.01.2017
comment
Когда я использовал это для извлечения моего MSI, я не заставлял его работать, когда у меня был конечный \ на пути. Если убрать обратную косую черту, мой MSI получился отлично. - person David Parvin; 31.10.2019

Быстрый список. Существует несколько распространенных типов файлов setup.exe. Вот некоторые из них в «шорт-листе». Более подробная информация здесь (вниз).

Setup.exe Extract: (попробуйте разные варианты)

setup.exe /a
setup.exe /s /extract_all
setup.exe /s /extract_all:[path]
setup.exe /stage_only
setup.exe /extract "C:\My work"
setup.exe /x
setup.exe /x [path]
setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"

dark.exe -x outputfolder setup.exe

dark.exe - это двоичный файл WiX - установите WiX, чтобы извлечь файл WiX setup.exe (на данный момент ). Подробнее (раздел 4).

Всегда:

setup.exe /?

Извлечение MSI: msiexec.exe / File.msi извлечение:

 msiexec /a File.msi
 msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn

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

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

Общие приемы. Один из приемов - запустить setup.exe и посмотреть в 1) system's temp folder for extracted files. Еще одна уловка - использовать 2) 7-Zip, WinRAR, WinZip или аналогичные инструменты архивирования, чтобы проверить, могут ли они прочитать формат. Некоторые заявляют об успехе к 3) opening the setup.exe in Visual Studio. Я не использую технику. 4) And there is obviously application repackaging - запись изменений, внесенных в компьютер после запуска установки, и его очистка - требует специального инструмента (большинство бесплатных инструментов приходят и уходят, Advanced Installer Architect и AdminStudio - крупные игроки).


ОБНОВЛЕНИЕ: краткое описание различных инструментов развертывания, используемых для создания установщиков: Как создать установщик Windows (подробные ссылки).

И более простой просмотр списка наиболее часто используемые инструменты разработки на данный момент (2018 г.) для более быстрого чтения и обзора.

И на хранение:


Просто отказ от ответственности: setup.exe файл может содержать встроенный MSI, это может быть установщик устаревшего стиля (не MSI) или это может быть обычный исполняемый файл без каких-либо средств извлечения. «Обсуждение» ниже сначала представляет использование админ-образов для файлов MSI и способы извлечения файлов MSI из файлов setup.exe. Затем он предоставляет ссылки для работы с другими типами файлов setup.exe. Также см. Раздел комментариев.

ОБНОВЛЕНИЕ: несколько разделов были добавлены непосредственно ниже, перед описанием извлечения файла MSI с помощью административной установки. Наиболее важно сообщение об извлечении пакетов WiX setup.exe (новый ребенок в блоке). Помните, что "последнее средство" для поиска извлеченных файлов установки - это запустить программу установки и затем искать извлеченные файлы во временной папке (удерживайте клавишу Windows , нажмите R, введите %temp% или %tmp% и нажмите Enter) - хотя сначала попробуйте другие варианты - из соображений надежности.

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

Общие ссылки:

Извлечь содержание:

Ссылки на поставщиков:


WiX Toolkit и Burn Bundles (файлы setup.exe)

Техническое примечание: набор инструментов WiX теперь предоставляет setup.exe файлы, созданные с помощью инструмента начальной загрузки Burn, для извлечения которых требуется собственный dark.exe декомпилятор этого инструментария. Запись используется для создания файлов setup.exe, которые могут устанавливать несколько встроенных MSI или исполняемых файлов в указанной последовательности. Вот пример команды извлечения:

dark.exe -x outputfolder MySetup.exe

Прежде чем вы сможете запустить такое извлечение, необходимо выполнить некоторые предварительные действия:

  1. Загрузите и установите инструментарий WiX (ссылка на предыдущий ответ с дополнительной контекстной информацией о WiX, а также ссылка для загрузки).
  2. После установки WiX просто откройте command prompt, CD в папке, где находится setup.exe. Затем укажите указанную выше команду и нажмите Enter
  3. Выходная папка будет содержать несколько подпапок, содержащих извлеченные файлы MSI и EXE, а также манифесты и файл ресурсов для графического интерфейса Burn (если они, конечно, изначально существовали в файле setup.exe).
  4. Теперь вы можете, в свою очередь, извлечь содержимое извлеченных файлов MSI (или файлов EXE). Для MSI это будет означать запуск административной установки, как описано ниже.

Имеется встроенная поддержка MSI для извлечения файлов (установка администратора)

MSI или установщик Windows имеет встроенную поддержку для этого - извлечения файлов из файла MSI. Это называется административной установкой . По сути, он предназначен для создания точки сетевой установки, из которой установка может быть запущена на многих целевых компьютерах. Это гарантирует, что исходные файлы всегда доступны для любых операций восстановления.

Обратите внимание, что запуск административной установки и использование zip-архива для извлечения файлов сильно отличается! Последний не регулирует макет мультимедиа в таблице мультимедиа, чтобы пакет был настроен на использование внешних исходных файлов - что это правильный путь. Всегда предпочитайте запускать фактическую установку администратора вместо любых извлеченных из архива zip-архивов. Что касается сжатия, на самом деле существует три разных алгоритма сжатия, используемых для файлов cab внутри MSI. формат файла: MSZip, LZX и сохранение (без сжатия). Все это выполняется правильно, выполняя установку администратора.

Важно: Установщик Windows кэширует установленные в системе файлы MSI для сценариев восстановления, изменения и удаления. Начиная с Windows 7 (MSI версии 5), файлы MSI теперь кэшируются в полном размере, чтобы не нарушить подпись файла, которая не позволяет выводить запрос UAC при запуске установки (известная проблема Vista). Это может привести к огромному увеличению потребления дискового пространства (несколько гигабайт для некоторых систем). Чтобы предотвратить кеширование огромного файла MSI, перед установкой необходимо выполнить установку пакета администратором. Таким образом компания с правильным развертыванием в управляемой сети будет делать что-то, и она удалит файлы cab и создаст точку сетевой установки с небольшим файлом MSI и другими файлами.


Админ-установки имеют много применений

Рекомендуется узнать больше об установках администратора, поскольку это полезная концепция, и я написал сообщение о stackoverflow: Что инициируется ли административная установка с помощью msiexec / a?.

По сути, установка администратора важна для:

  • Extracting and inspecting the installer files
    • To get an idea of what is actually being installed and where
    • Чтобы файлы выглядели надежными и безопасными (без вирусов - вредоносные программы и вирусы все еще могут скрываться внутри файла MSI)
  • Развертывание с помощью программного обеспечения для управления системами (например, SCCM)
  • Переупаковка корпоративного приложения
  • Ремонт, доработка и самостоятельный ремонт
  • Исправления и обновления
  • Реклама MSI (среди прочего, это включает в себя функцию «запуск из источника», при которой вы можете запускать непосредственно из общего сетевого ресурса и устанавливать только ярлыки и данные реестра)
  • Ряд других мелких деталей

Пожалуйста, прочтите сообщение stackoverflow, указанное выше, для получения более подробной информации. Это очень важная концепция для системных администраторов, разработчиков пакетов, разработчиков установки, менеджеров выпусков и даже средний пользователь, чтобы увидеть, что они устанавливают и т. д.


Админ-установка, практическое руководство

Вы можете выполнить административную установку несколькими способами в зависимости от того, как поставляется установщик. По сути, он поставляется либо в виде файла MSI, либо в виде файла setup.exe.

Выполните эти команды из командной строки с повышенными привилегиями и следуйте инструкциям в графическом интерфейсе пользователя для интерактивных командных строк:

  • Файлы MSI:

    msiexec /a File.msi
    

    это для работы с графическим интерфейсом, вы также можете сделать это беззвучно:

    msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn
    
  • файлы setup.exe:

    setup.exe /a
    

Файл setup.exe также может быть устаревшим (не MSI) или ужасным типом файлов Installscript MSI - хорошо известная ошибка. Тип проекта Installshield с гибридным нестандартным форматом MSI. По сути, это MSI с настраиваемым, более продвинутым графическим интерфейсом, но он также полон ошибок.

Для устаревших файлов setup.exe / a ничего не будет делать, но вы можете попробовать переключатель / extract_all: [путь], как описано в < a href = "http://www.itninja.com/static/090770319967727eb89b428d77dcac07.pdf" rel = "noreferrer"> этот PDF-файл. Это хороший справочник для тихой установки и других вещей. Другой ресурс - это этот список параметров командной строки Installshield setup.exe.

Файлы исправлений MSI (* .MSP) могут иметь формат применяется к образу администратора для правильного извлечения его файлов. 7Zip также сможет распаковать файлы, но они не будут отформатированы должным образом.

Наконец - последнее средство - если другой способ не работает, вы можете получить извлеченные установочные файлы, очистив временную папку в вашей системе, запустив setup.exe в интерактивном режиме и дождавшись первого диалогового окна. показывать. В большинстве случаев установщик извлекает кучу файлов во временную папку. Иногда файлы простые, иногда в формате CAB, но Winzip, 7Zip или даже Universal Extractor (не тестировал этот продукт) - могут их открыть.

person Stein Åsmul    schedule 28.07.2014
comment
+1. Есть ли где-нибудь веб-сайт, на котором представлены примеры отличных ответов, подобных этому? - person Roman Boiko; 28.07.2014
comment
См. Также ответ Майкла Урмана здесь. - person Stein Åsmul; 27.08.2014
comment
OP спрашивал, как извлечь MSI из EXE, который, как правило, не имеет единого способа. Это зависит от EXE и от того, как встраивается MSI. - person Heath; 24.03.2016
comment
Да согласен. Команды Installshield setup.exe и Команды Wise setup.exe. И расширенный установщик с setup.exe /x или setup.exe /extract. Также есть поиск без вывода сообщений, но он не прошел сканирование virustotal.com, поэтому я не буду ссылаться на него. - person Stein Åsmul; 31.08.2017
comment
Административная установка создает почти пустую папку MSI + a ProgramFilesFolder в качестве побочного продукта внутри TARGETDIR. Это не просто извлечение файлов. - person Nicke Manarin; 03.03.2020

Я предполагаю, что этот вопрос касался в основном InstallShield с учетом тегов, но в случае, если кто-то придет сюда с той же проблемой для пакетов на основе WiX (и, возможно, других), просто вызовите установщик с помощью / extract, например:

C:\> installer.exe /extract

Это поместит MSI в папку рядом с установщиком.

person javawizard    schedule 18.12.2012
comment
Есть ли способ извлечь файлы, не выводя в Windows подсказку о том, где извлечь? - person Nickadiemus; 14.01.2019

Начиная с параметра:

setup.exe /A

просит сохранить включенные файлы (включая MSI).

Это может зависеть от программного обеспечения, создавшего setup.exe.

person Curt    schedule 09.07.2010
comment
Затем найдите файл msi в системном временном каталоге. Затем msiexec / a some_file.msi / qb TARGETDIR = D: \ some_file \ - person diyism; 05.10.2011
comment
См. мой ответ в этой теме для получения дополнительной информации о запуске административных установок через setup.exe / a - person Stein Åsmul; 28.07.2014
comment
При этом не извлекается MSI, а выполняется административная установка, которая не просто извлекает исходный файл MSI. MSI в целевом каталоге не будет содержать сжатых установочных файлов, но установочные файлы будут находиться в подпапках целевого каталога, на которые, в свою очередь, ссылается новый файл MSI. Таким образом, этот MSI нельзя использовать для простого распространения, если это ваша цель. - person Daniel Dreibrodt; 18.08.2014

Единственный способ сделать это - запустить exe и собрать MSI. Вы должны позаботиться о том, чтобы при преобразовании MSI с помощью MST они могли потеряться.

Я использую эту командную строку пакета:

SET TMP=c:\msipath

MD "%TMP%"

SET TEMP=%TMP%

start /d "c:\install" install.exe /L1033

PING 1.1.1.1 -n 1 -w 10000 >NUL

for /R "%TMP%" %%f in (*.msi) do copy "%%f" "%TMP%"

taskkill /F /IM msiexec.exe /T
person Cedric Debattista    schedule 23.08.2012
comment
Вы также можете просто запустить echo "%TMP%" в cmd, чтобы найти временный путь, запустить программу установки, посмотреть, какой каталог создан в %TMP% (например, {A6B23C96-C53A-4A71-9B8B-73E16B680A58}), а затем вручную скопировать файлы из этого каталога в другое место. - person m01; 19.06.2013

Запустите установщик, но не нажимайте кнопку Install>. потом

cd "%AppData%\..\LocalLow\Sun\Java"

и найдите свой файл MSI в одном из подкаталогов (например, jre1.7.0_25).

Обратите внимание, что также потребуется Data1.cab из этого подкаталога.

person Roman Boiko    schedule 18.08.2013
comment
Из всех предложенных методов в ответ на несколько вопросов, это единственный, который сработал для меня. Я использую вино в Ubuntu. Файлы на самом деле находились в папке Temp в нескольких подкаталогах. Только после того, как файлы CAB были распакованы exe, я смог использовать другие инструменты. Аргументы командной строки не сделали ничего, что я мог видеть. - person EdwinW; 17.02.2014
comment
Вы найдете файлы установки, извлеченные где-то в% TMP%, путь Java, указанный в этом вопросе, не актуален для других установщиков, кроме среды выполнения Java. - person Stein Åsmul; 28.07.2014

Нет необходимости использовать какие-либо инструменты !! Мы можем пойти по простому пути.

Я не знаю, какой инструмент создал вашу самораспаковывающуюся программу установки, поэтому мне придется дать общий ответ.

Большинство программ подобного рода извлекают файл пакета (.msi) в каталог TEMP. Это поведение по умолчанию для InstallShield Developer.

Без дополнительной информации я бы порекомендовал вам просто запустить установку, и после отображения первого диалогового окна MSI вы можете проверить свой каталог TEMP на наличие вновь созданного подкаталога или файла MSI. Перед отменой / остановкой установщика просто скопируйте этот файл MSI из папки TEMP. После этого вы можете отменить установку.

person Ajit Medhekar    schedule 23.03.2016