Wyodrębnianie plików msi przy użyciu systemu Linux

23

Powiązane: Jak wyodrębnić pliki z pakietu MSI?

Aby wyodrębnić zawartość instalatora MSI za pomocą Linuksa, mogę albo używać msiexecwina, albo używać 7zip.

Ten ostatni nie zachowuje jednak katalogów i nazw plików tylko częściowo. Czy jest jakiś sposób, aby poprawnie wyodrębnić pliki MSI bez konieczności używania wine?


edycja: aby zilustrować problem z Microsoft Infer.NET, oto lista plików, które produkuje 7zip, a tutaj jeden, który produkuje msiexec (tam, gdzie chcę tego drugiego)

Michael Schubert
źródło
Możesz użyć tego artykułu do Ubuntu, mam nadzieję, że ci to pomoże. A także spróbuj Jsmsix.exe .
avirk
Dzięki, już przeczytałem artykuł i nie rozwiązuje on problemów z 7zipem (ani w połączeniu z np. Cabextract). Jsmsix nadal będzie wymagał, wineponieważ nie można natywnie uruchamiać plików wykonywalnych systemu Windows.
Michael Schubert
Z jakim problemem możesz się 7zipwyjaśnić?
avirk
dodał przykład
Michael Schubert
2
Chciałbym stworzyć skrypt budujący dla Archlinuxa, dla którego konfiguracja wina jest dość obszerną zależnością, aby móc zainstalować coś, co powinno zależeć wyłącznie od mono.
Michael Schubert

Odpowiedzi:

9

Chociaż nie pomoże ci to natychmiast, lessmsi pracuje nad natywną wersją Linuksa. Zachowuje taką strukturę katalogów, jak chcesz, więc warto sprawdzić, czy będzie to dla ciebie problem długoterminowy. Niestety, obsługa .msi w Linuksie wydaje się dość rzadka, więc lessmsi lub msiexec przez wine może być twoją jedyną natychmiastową opcją, nawet jeśli (jak powiedziałeś) wino jest dość silną zależnością przy wydobywaniu archiwów.

ChimneyImp
źródło
To rzeczywiście wydaje się najlepsze rozwiązanie, używając wina i czekając na lessmsi dla Linuksa.
Michael Schubert,
4
FYI: W najnowszej wersji lessmsi udało mi się przenieść kod do wyodrębnienia kabiny do libmspack, który jest przenośną biblioteką, która również powinna działać na Linuksie. Zrobiliśmy więc konkretny krok w kierunku wsparcia dla Linuksa. Wkrótce mam nadzieję użyć przenośnej biblioteki msi, która sprawi, że wszystko będzie przenośne.
Scott Willeke,
-1. Wersja Linuksa nadal nie istnieje po wielu latach, a ponieważ było pytanie, czy jest jakiś sposób, aby poprawnie wyodrębnić pliki MSI bez konieczności używania wina, nie jest to odpowiedź. Użyłem zamiast tego msiextract z pakietu msitools ( sudo apt install msitoolsw Ubuntu), jak zalecono w odpowiedzi użytkownika 2828.
Lissanro Rayen
19

Wypróbuj msiextract, https://live.gnome.org/msitools

I otwórz błędy!

użytkownik 2834
źródło
Nie znaleziono pakietu dla 14.04, a zbudowanie go również wymaga wielu narzędzi / bibliotek i umiejętności. Rezygnacja
Harry
1
jest w wersji debian i ubuntu willy: launchpad.net/ubuntu/+source/msitools . Następnie możesz po prostu wywołać „msiextract file.msi” i to wszystko, nie potrzebujesz już żadnych umiejętności.
user2834,
Działa tutaj i zachowuje nazwy plików i ścieżki. Dzięki.
Simon A. Eugster,
1

Możesz wypróbować oprogramowanie o nazwie cabextract - przynajmniej Ubuntu ma dla niego pakiety, spodziewałbym się, że znajdzie się również w innych popularnych dystrybucjach.

Unksi
źródło
4
Dzięki za podpowiedź, ale cabextract nie zachowuje nawet częściowo nazw plików i katalogów (więc działa gorzej niż 7zip).
Michael Schubert
Format MSI składa się z wielu warstw: na najwyższym poziomie jest to obraz dysku, z blokami danych rozrzuconymi po całym pliku .msi. Po zdekodowaniu obrazu dysku zawiera on kilka plików, w tym plik cab i pliki bazy danych. cabextract znajduje nagłówki plików CAB wewnątrz obrazu .msi, ale ponieważ pełny plik cab nie jest ciągły, nie można go wyodrębnić. 7zip może wyodrębnić obraz dysku, a następnie plik CAB, ale nie wie, jak odczytać pliki bazy danych, które mapują wpisy pliku CAB na ich prawdziwe ścieżki instalacyjne, tak jak robi to lessmsi.
Stuart Caie