Сжатие несжатого файла MSI - PullRequest
2 голосов
/ 26 апреля 2010

У нас есть проект установки, который создает несжатый MSI-файл и вообще не использует Setup.exe для последующего сжатия NSIS.
В специальной настройке сборки я хочу скопировать этот MSI до его переноса в NSIS, изменить копию и сохранить его. Я также хотел бы сжать его после того, как он был создан msbuild.
Есть ли простой способ (какой-нибудь инструмент командной строки, может быть?), Который я могу использовать, чтобы просто сжать уже созданный MSI-файл?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Да! См. Windows SDK :)

Существует множество примеров сценариев, показывающих, как манипулировать файлами MSI с помощью API установщика Windows.

Сам файл MSI фактически никогда не сжимается, однако он может содержать встроенные CAB-файлы, которые могут быть сжаты.

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

Любой инструмент, который вы можете найти, будет делать именно то, что я упомянул выше, однако, собрав его вместе, вы получите более глубокое понимание того, как работает MSI:)

0 голосов
/ 03 сентября 2010

Преобразование MSI из несжатого в сжатый.

  1. Выполните установку администратора из MSI.
  2. Используйте PATCH для передачи нужных вам файлов патчей.
  3. Скопируйте файлы WiFilVer.vbs и WiMakeCab.vbs из "C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\msi\scripts" в папку установки администратора.
  4. Чтобы обновить файлы новыми, запустите: CScript //nologo WiFilVer.vbs vendormsi.msi /U
  5. Чтобы создать cab-файл и вставить его в msi: cscript /nologo WiMakCab.vbs eTalk.msi Data1 /R /L /C /U /E /S
  6. Если вы не получили файл cab на шаге 5, проверьте таблицу Media в Orca и посмотрите: "http://www.spinnersoftware.com/kb/en/msi/createmsi.html", найдите раздел о сжатии.
  7. Теперь у вас должна быть MSI, которая включает в себя все.

Сжатие MSI с внутренней или внешней кабиной

  1. Выполните установку MSI для администратора.
  2. Используйте PATCH для передачи нужных вам файлов патчей.
  3. Скопируйте файл WiMakeCab.vbs из Windows SDK в папку установки администратора.
  4. Выполнить: cscript WiMakCab.vbs Vendor.msi Data1 / L / C / U / E
  5. У вас должен быть MSI со встроенным CAB-файлом.
...