Mengekstrak file MSI menggunakan Linux

23

Terkait: Bagaimana cara mengekstrak file dari paket MSI?

Untuk mengekstrak konten installer MSI menggunakan Linux, saya dapat menggunakan msiexecdengan anggur atau menggunakan 7zip.

Namun, yang terakhir ini tidak mempertahankan direktori dan nama file hanya sebagian. Apakah ada cara untuk mengekstrak file MSI dengan benar tanpa harus menggunakan wine?


sunting: untuk mengilustrasikan masalah dengan Microsoft's Infer.NET, di sini adalah daftar file yang dihasilkan 7zip dan di sini satu yang menghasilkan msiexec (di mana yang terakhir adalah apa yang saya inginkan)

Michael Schubert
sumber
Anda dapat menggunakan artikel ini untuk Ubuntu berharap ini akan membantu Anda. Dan juga coba Jsmsix.exe .
avirk
Terima kasih, saya sudah membaca artikel itu dan tidak menyelesaikan masalah 7zip (tidak dalam kombinasi dengan misalnya cabextract). Jsmsix masih membutuhkan winekarena Anda tidak dapat menjalankan executable Windows secara native.
Michael Schubert
Masalah apa yang Anda hadapi yang 7zipbisa Anda jelaskan?
avirk
menambahkan contoh
Michael Schubert
2
Yang ingin saya lakukan adalah membuat skrip build untuk Archlinux, yang mana set up wine adalah ketergantungan yang besar untuk dapat menginstal sesuatu yang hanya bergantung pada mono.
Michael Schubert

Jawaban:

9

Meskipun itu tidak akan membantu Anda dengan segera, lessMsi bekerja pada versi Linux asli. Ini mempertahankan struktur direktori seperti yang Anda inginkan, jadi ada baiknya memeriksa apakah ini akan menjadi masalah jangka panjang untuk Anda. Sayangnya, dukungan .msi di Linux tampaknya sangat jarang, jadi lessmsi atau msiexec melalui anggur mungkin menjadi satu-satunya pilihan langsung Anda, bahkan jika (seperti yang Anda katakan) anggur adalah ketergantungan yang cukup berat untuk mengekstraksi arsip.

ChimneyImp
sumber
Itu memang tampaknya menjadi solusi terbaik, menggunakan anggur dan menunggu lessmsi untuk Linux.
Michael Schubert
4
FYI: Dalam rilis lessmsi terbaru saya berhasil memindahkan kode ekstraksi kabin ke libmspack yang merupakan perpustakaan portabel yang juga harus dijalankan di linux. Jadi kami baru saja mengambil langkah nyata menuju dukungan linux. Segera saya berharap untuk menggunakan lib msi portabel, yang akan membuat semuanya portabel.
Scott Willeke
-1. Versi Linux masih belum ada setelah bertahun-tahun, dan karena pertanyaannya adalah apakah ada cara untuk mengekstrak file MSI dengan benar tanpa harus menggunakan anggur, ini bukan jawabannya. Saya malah menggunakan msiextract dari paket msitools ( sudo apt install msitoolsdi Ubuntu) seperti yang direkomendasikan dalam jawaban oleh user2834.
Lissanro Rayen
19

Cobalah msiextract, https://live.gnome.org/msitools

Dan buka bug!

pengguna2834
sumber
Tidak ada paket ditemukan untuk 14,04 dan membangunnya juga membutuhkan banyak alat / lib dan keterampilan. Menyerah
harry
1
itu dalam debian, dan ubuntu willy: launchpad.net/ubuntu/+source/msitools . Anda kemudian dapat memanggil "msiextract file.msi" dan hanya itu, tidak perlu lagi keterampilan.
user2834
Bekerja di sini, dan mempertahankan nama dan jalur file. Terima kasih.
Simon A. Eugster
1

Anda dapat mencoba perangkat lunak yang disebut cabextract - setidaknya Ubuntu memiliki paket untuk itu, saya berharap itu dapat ditemukan dari distro populer lainnya juga.

Unksi
sumber
4
Terima kasih atas petunjuknya, tetapi cabextract bahkan tidak menghemat sebagian nama file dan direktori (sehingga kinerjanya lebih buruk daripada 7zip).
Michael Schubert
Format MSI adalah beberapa lapisan: di tingkat atas itu adalah gambar disk, dengan blok data yang tersebar di dalam file .msi. Jika Anda mendekode gambar disk, itu berisi beberapa file, termasuk file .cab, dan file database. cabextract menemukan header file CAB di dalam gambar .msi, tetapi karena file .cab penuh tidak berdekatan, ia tidak dapat mengekstraknya. 7zip dapat mengekstrak gambar disk dan kemudian file CAB, tetapi tidak tahu cara membaca file database, yang memetakan entri file CAB ke jalur instalasi yang sebenarnya, seperti halnya lessmsi.
Stuart Caie