Apakah mungkin untuk mengeksekusi file setelah ekstraksi dari arsip 7-Zip self-extracting archive (SFX)?

40

Saya mencoba membuat aplikasi penyebaran yang terkompresi.

Saat ini saya sedang mengambil satu set file yang saya publikasikan dari IDE saya (Visual Studio 2008 - aplikasi WPF yang diterbitkan) dan mengompresnya dalam arsip SFX 7-Zip.

Pengguna saya bertanya apakah mereka dapat "menginstal satu klik" dari exe 7-Zip. Ada daftar parameter ketika saya membuat arsip. Apakah ada cara untuk mengatur semacam kombinasi parameter untuk memanggil executable installer yang diekstraksi?

Sayangnya dokumentasi 7-Zip sepertinya tidak mencakup skenario ini. Saya telah melihat beberapa aplikasi berbayar yang melakukan sesuatu yang mirip dengan ini, tetapi saya mencoba untuk menjaga alat yang saya tulis bebas dari kode berlisensi sehingga kita dapat menggunakannya secara internal.

Mike G
sumber
Bisakah Anda menunjuk seseorang yang dibayar?
abhishek77in

Jawaban:

35

Anda harus mengunduh LMZA SDK dari 7-Zip . File "installer.txt" berisi dokumentasi:

7zSD.sfx adalah modul SFX untuk installer. 7zSD.sfx menggunakan msvcrt.dll.

Modul SFX untuk installer memungkinkan untuk membuat program instalasi. Modul tersebut mengekstrak arsip ke folder temp dan kemudian menjalankan program yang ditentukan dan menghapus file temp setelah program selesai. Arsip ekstrak sendiri untuk installer harus dibuat sebagai bergabung dengan 3 file: SFX_Module, Installer_Config, 7z_Archive. Installer_Config adalah file opsional. Anda dapat menggunakan perintah berikut untuk membuat arsip self-extract installer:

copy /b 7zSD.sfx + config.txt + archive.7z archive.exe

Anda perlu membuat file config.txt.

File konfigurasi berisi perintah untuk Pemasang. File dimulai dari string ;!@Install@!UTF-8!dan diakhiri dengan ;!@InstallEnd@!. File harus ditulis dalam pengkodean UTF-8. File berisi pasangan string:

ID_String = "Nilai"

Title Judul untuk pesan

BeginPrompt Mulai pesan Prompt

ProgressNilai bisa "ya" atau "tidak". Nilai default adalah "ya".

RunProgramPerintah untuk mengeksekusi. Nilai default adalah "setup.exe". Substring %% T akan diganti dengan path ke folder sementara, tempat file diekstraksi

DirectoryAwalan direktori untuk "RunProgram". Nilai default adalah ". \"

ExecuteFile Nama file untuk dieksekusi

ExecuteParameters Parameter untuk "ExecuteFile"

Sebagai contoh:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
Jason
sumber
1
iya nih. Saya sudah mencobanya. Agak tidak nyaman karena semuanya adalah baris perintah, tetapi Anda akan menemukan dokumentasi yang bagus untuk itu. Dan saya mendapatkan kompresi terbaik yang tersedia secara gratis.
Ganesh R.
@ MikeG - Tautan itu jauh lebih teliti. Itu menjelaskan bagaimana membuat bagian dekompresi sepenuhnya transparan. Sangat bagus - Terima kasih!
namuol
5
Perhatikan bahwa "modul SFX dipindahkan ke paket LZMA SDK" (tersedia di 7-zip.org ) pada versi 9.35 beta.
Lukas
21

Solusi yang disepakati itu benar, tetapi sebenarnya tidak membantu dalam menjelaskan apa yang sebenarnya perlu Anda lakukan !. Saya membaca ini dan banyak solusi lainnya dan saya tidak dapat menemukan petunjuk sederhana yang lengkap dan lengkap tentang cara melakukan ini.

Jika Anda bingung seperti dulu, baca posting blog saya yang memberikan petunjuk langkah demi langkah tentang cara mencapai apa yang telah diposting Molly7244.

Cara membuat arsip ekstraksi diri yang menjalankan setup.exe Anda dengan 7zip -sfx switch

Saya baru sadar bahwa tautan bisa mati, jadi ini langkah-langkahnya, dari blog saya

Langkah 1 - Atur folder instalasi Anda

Untuk mempermudah membuat folder c: \ Instal. Di sinilah kami akan menyalin semua file yang diperlukan.

Langkah 2 - 7Letakkan installer Anda

  1. Buka folder yang memiliki .msi dan setup.exe Anda
  2. Pilih .msi dan setup.exe
  3. Klik kanan dan pilih 7Zip -> "Tambahkan ke Arsip"
  4. Beri nama arsip Anda "Installer.7z" (atau nama pilihan Anda)
  5. Klik Oke
  6. Anda sekarang harus memiliki "Installer.7z".
  7. Salin file .7z ini ke direktori c: \ Install Anda

Langkah 3 - Dapatkan modul ekstensi 7z-Extra sfx

Anda perlu mengunduh 7z-Extra.

  1. Ikuti tautan ini untuk pergi mengunduh 7Zip
  2. Anda perlu mengunduh versi 9.20 (sebagai @ Mei-2015) karena beta tidak berisi file yang benar.
  3. Sebuah mendownload secara langsung hubungan.
  4. Ekstrak file ekstra 7zip
  5. Salin file "7zS.sfx" ke c: \ Instal

Langkah 4 - Atur config.txt Anda

Saya akan merekomendasikan menggunakan NotePad ++ untuk mengedit file teks ini karena Anda harus menyandikannya dalam UTF-8, instruksi berikut menggunakan notepad ++.

  1. Menggunakan windows explorer, buka c: \ Install
  2. klik kanan dan pilih "File Teks Baru" dan beri nama config.txt
  3. klik kanan dan pilih "Edit dengan NotePad ++
  4. Klik "Encoding Menu" dan pilih "Encode in UTF-8"
  5. Masukkan sesuatu seperti ini:

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

Edit ini menggantikan [SOFTWARE v1.0.0.0] dengan nama produk Anda. Catatan tentang parameter dan opsi untuk file pengaturan ada di sini

Pos pemeriksaan

Anda sekarang harus memiliki folder "c: \ Install" dengan 3 file berikut:

  1. Installer.7z
  2. 7zS.sfx
  3. config.txt

Langkah 5 - Buat arsip

Instruksi ini saya temukan di web tetapi tidak menjelaskan 4 langkah di atas.

  1. Buka jendela cmd, Jendela + R -> cmd -> tekan enter
  2. Di jendela perintah, ketikkan yang berikut ini

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Lihat di c: \ Instal dan sekarang Anda akan melihat Anda memiliki MyInstaller.exe

  4. Anda sudah selesai

Jalankan penginstal

Klik dua kali pada MyInstaller.exe dan akan muncul pesan Anda. Klik OK dan setup.exe akan berjalan.

Catatan PS tentang Otomasi

Sekarang setelah Anda menjalankan ini di direktori c: \ Install saya akan membuat file "Install.bat" dan memasukkan skrip salin di dalamnya.

copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe

Sekarang Anda bisa mengedit dan menjalankan Install.bat setiap kali Anda perlu membangun kembali versi baru paket penerapan Anda.

jcrawfor74
sumber
2
Ini harus menjadi jawaban yang diterima!
noelicus
Apakah mungkin untuk melewatkan baris perintah arg ke ExecuteParametersitem dalam config.txt? Sebagai contoh: C:\Install\MyInstaller.exe some_file.txt akan mengeksekusi setup.exe some_file.txt.
dthor
Ya itu. Seperti matthew-lundberg mengatakan dalam jawabannya , "Argumen yang diteruskan ke executable SFX diteruskan ke skrip Install.cmd"
dthor
8

Anda juga harus melihat NSIS . Dengannya, Anda dapat membuat penginstal yang dikompresi dengan metode yang sama seperti yang digunakan 7-Zip ( LZMA ), sehingga ukurannya harus kira-kira sama, dan Anda memiliki kontrol penuh atas proses instalasi.

Matthew Talbert
sumber
2

Membangun jawaban jcrawfor74, berikut adalah beberapa info tambahan:

Alih-alih 7zS.sfx , Anda juga dapat menggunakan file 7zS2.sfx . Ini adalah versi yang jauh lebih kecil (28 kB vs 140 kB) tetapi tidak mendukung file config.txt. Jadi Anda bisa membiarkannya di perintah copy. Jika Anda hanya ingin membuat skrip konfigurasi kecil, ini memungkinkan Anda membuat file EXE yang lebih kecil.

Modul SFX yang lebih kecil tidak menanyakan pertanyaan. Itu mengekstrak file ke folder sementara sebagai modul lain, dan kemudian menemukan kandidat yang dapat dieksekusi. Menurut kode sumber (juga tersedia di halaman unduhan), di C \ Util \ SfxSetup \ SfxSetup.c, ia menimbang file secara berbeda berdasarkan nama dan ekstensi mereka dan kemudian mengambil file skor tertinggi.

Kedua modul SFX secara otomatis dijalankan sebagai Administrator , setidaknya di Windows 10, dan ini tidak dapat dikonfigurasi. Meskipun perilaku ini mungkin diinginkan untuk pengaturan di seluruh sistem, ini mungkin tidak selalu demikian. Selain itu, keputusan ini hanya didasarkan pada data versi file karena tidak ada manifes yang disertakan yang secara eksplisit memberi tahu Windows apa yang harus dilakukan. Kompatibilitas Windows melihat file dan menemukan string seperti "Pengaturan" yang mengarah ke prompt elevasi.

Jika Anda memerlukan modul SFX yang tidak meminta izin Admin, Anda dapat membangun kembali modul SFX dari sumber, atau lebih sederhana, mengedit info versi file-nya dengan editor sumber daya seperti ini . Hapus saja kata "Pengaturan" dari bidang FileDescription, dalam kasus Resource Hacker yang disebutkan kompilasi file, dan simpan file EXE. Anda juga bisa melakukan langkah ini pada file 7zS.sfx atau 7zS2.sfx secara langsung dan menyimpannya di suatu tempat sehingga Anda dapat menggunakannya untuk membangun paket SFX yang tidak ditinggikan. Dan Anda dapat menggunakan ini untuk sepenuhnya menyesuaikan info versi file untuk memasukkan nama produk Anda atau apa pun di dalamnya yang menjelaskan muatan.

ygoe
sumber