Назад | Перейти на главную страницу

Как я могу сравнить содержимое двух (или более) файлов MSI?

Как мне сделать "сравнение содержания"из двух (или более) Файлы MSI и посмотрите, что на самом деле отличается внутри файлов - вместо того, чтобы бесполезное двоичное сравнение? (который, очевидно, только говорит мне, имею ли я дело с копиями одного и того же файла или нет).

Файлы MSI

Файл MSI содержит примитивная база данных MS SQL встроен в Файл хранилища со структурой COM (файловая система в файле с потоками хранения разного типа - старый формат MS Office COM / OLE).

Ты можешь извлекать файлы из MSI, или вы можете декомпилировать весь MSI со всеми его потоками. Каждый подход кратко описан ниже.

При декомпиляции (почти) возможна полная прозрачность, за исключением скомпилированных пользовательских действий (обычно написанных на C / C ++). Управляемый скомпилированный код (C #) на самом деле может быть (теоретически) декомпилирован.

Чтобы определить (примерно), что на самом деле делает настраиваемое действие черного ящика, вы можете записать установку MSI, используя инструмент для переупаковки - который сканирует систему до и после установки, показывая все изменения - вы видите, что произошло, но не то, как это произошло. Очень немногие люди нуждаются в таком внимании.

Только сравнение файлов

Это старые новости, но если все, что вас беспокоит, это сравнение файлов, встроенных в MSI / setup.exe, вы можете использовать административная установка чтобы извлечь файлы, встроенные в MSI / setup.exe, а затем использовать любой инструмент сравнения файлов для сравнения файлов, извлеченных для каждой версии:

  • setup.exe /a
  • msiexec.exe /a "MySetup.msi"

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

  • msiexec.exe /a "MySetup.msi" TARGETDIR="C:\MyOutputFolder

Файлы Setup.exe, содержащие встроенные файлы MSI, могут быть разных типов, некоторые указатели:

По сути, административная установка извлекает установочные файлы из встроенных файлов CAB в самом MSI (CABS также может быть внешним) и выводит их в аккуратная структура папок примерно отражая их предполагаемые целевые места назначения при установке. В MSI можно использовать несколько форм сжатия. - все обрабатывается административной установкой. Пожалуйста, не распаковывайте файлы MSI!

Наконец Media table настроен для использования теперь извлеченных исходных файлов вместо внутренних файлов CAB - а внутренние файлы CAB удаляются, что потенциально делает выходной MSI намного меньше оригинала. Принципиально любой цифровые подписи удалены.

Раньше файлы MSI кешировались в %SystemRoot%\Installer лишены своих файлов CAB (что делает их маленькими), но теперь они кэшируются в полном размере, что потенциально значительно увеличивает требования к хранилищу. Использование административной установки - это способ уменьшить этот размер кеширования (за исключением удаленных цифровых подписей). Подробнее об этом здесь: Почему MSI требует исходный файл .msi для продолжения удаления?

Более подробная информация об административных установках здесь:


«Сравнение содержимого MSI»

Если вы хотите более подробно определить, чем отличаются два файла MSI (например, версия 1 и 2 пакета), вы можете немного активнее использовать соответствующий Просмотрщик файлов MSI или Декомпилятор MSI.

Я написал аннотацию к stackoverflow.com на как сравнить файлы MSI. Мне было предложено добавить ссылку здесь на serverfault.com к этому содержанию. Может быть, это поможет системным администраторам.

Я не хочу иметь проблему с двумя источниками, поэтому я просто сделаю ссылку на версию stackoverflow (надеюсь, что это нормальная практика): Как я могу сравнить содержимое двух (или более) файлов MSI? В этом ответе перечислены несколько инструментов (как бесплатных, так и коммерческих), которые помогут вам провести «настоящее сравнение».

Расширенные возможности декомпиляции MSI dark.exe из набора инструментов WiX может представлять особый интерес. Помимо декомпиляции файла MSI, связанный контент также описывает, как распаковать setup.exe файлы, созданные с помощью Набор инструментов WiX (функция загрузчика, которая может последовательно устанавливать несколько файлов MSI и встроенных EXE-файлов). Распакованный контент, в свою очередь, может быть обработан тем же dark.exe файл (при условии, что это файлы MSI).

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