Извлечение MSI-файлов с использованием Linux

23

Связанный: Как извлечь файлы из пакета MSI?

Чтобы извлечь содержимое установщика MSI с использованием Linux, я могу использовать либо msiexecс Wine, либо использовать 7zip.

Однако последний не сохраняет каталоги и имена файлов только частично. Есть ли способ правильно извлечь файлы MSI без использования wine?


редактировать: чтобы проиллюстрировать проблему с Infer.NET от Microsoft, вот список файлов, которые производит 7zip, и вот тот, который производит msiexec (где последний - то, что я хочу)

Михаэль Шуберт
источник
Вы можете использовать эту статью для Ubuntu, надеюсь, она вам поможет. А также попробуйте Jsmsix.exe .
avirk
Спасибо, я уже прочитал статью, и она не решает проблемы 7zip (ни в сочетании, например, с cabextract). Jsmsix по-прежнему требует, wineпотому что вы не можете запускать исполняемые файлы Windows изначально.
Михаэль Шуберт
С какой проблемой вы можете столкнуться 7zip?
Авирк
добавил пример
Михаэль Шуберт
2
То, что я хотел бы сделать, это создать скрипт сборки для Archlinux, для которого настройка Wine является довольно громоздкой зависимостью, просто чтобы иметь возможность установить что-то, что должно зависеть исключительно от mono.
Михаэль Шуберт

Ответы:

9

Хотя это не поможет вам сразу, Lessmsi работает над родной версией Linux. Он сохраняет структуру каталогов так, как вы хотите, поэтому стоит проверить, будет ли это долгосрочной проблемой для вас. К сожалению, поддержка .msi в Linux кажется довольно разреженной, поэтому lessmsi или msiexec через wine могут быть вашими единственными немедленными вариантами, даже если (как вы сказали) wine является довольно тяжелой зависимостью для извлечения архивов.

ChimneyImp
источник
Похоже, что это действительно лучшее решение - использовать Wine и ждать Lessmsi для Linux.
Михаэль Шуберт
4
К вашему сведению: в последнем выпуске lessmsi мне удалось перенести код извлечения из кабины в libmspack, который является переносимой библиотекой, которая должна работать и в Linux. Поэтому мы недавно сделали конкретный шаг к поддержке Linux. Вскоре я надеюсь использовать переносимую MSI-библиотеку, которая сделает все переносимым.
Скотт Виллек
-1. Версии для Linux по-прежнему не существует спустя много лет, и поскольку вопрос заключается в том, существует ли какой-либо способ правильно извлечь файлы MSI без использования Wine, это не ответ. Вместо этого я использовал msiextract из пакета msitools ( sudo apt install msitoolsв Ubuntu), как рекомендовано в ответе пользователя 2834.
Лиссанро Райен
19

Попробуйте msiextract, https://live.gnome.org/msitools

И открывать ошибки!

user2834
источник
На 14.04 пакет не найден, и для его сборки также нужно много инструментов / библиотек и навыков. Сдаюсь
Гарри
1
это в Debian и Ubuntu Willy: launchpad.net/ubuntu/+source/msitools . Затем вы можете просто вызвать "msiextract file.msi" и все, больше никаких навыков не требуется.
user2834
Работает здесь, и сохраняет имена файлов и пути. Спасибо.
Саймон
1

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

Unksi
источник
4
Спасибо за подсказку, но cabextract даже частично не сохраняет имена файлов и каталогов (поэтому он работает хуже, чем 7zip).
Михаэль Шуберт,
Формат MSI состоит из нескольких уровней: на верхнем уровне это образ диска, вокруг которого разбросаны блоки данных внутри MSI-файла. Если вы декодируете образ диска, он содержит несколько файлов, включая CAB-файл и файлы базы данных. cabextract находит заголовки CAB-файла внутри образа .msi, но, поскольку полный файл .cab не является смежным, он не может извлечь его. 7zip может извлечь образ диска, а затем файл CAB, но он не знает, как читать файлы базы данных, которые сопоставляют записи файла CAB с их истинными путями установки, как и lessmsi.
Стюарт Кей