Có thể thực thi một tệp sau khi trích xuất từ ​​kho lưu trữ tự giải nén 7-Zip (SFX) không?


40

Tôi đang cố gắng tạo một ứng dụng có thể triển khai nén.

Hiện tại tôi đang lấy một tập hợp các tệp mà tôi đã xuất bản từ IDE của mình (Visual Studio 2008 - ứng dụng đã xuất bản WPF) và nén chúng trong kho lưu trữ SFX 7-Zip.

Người dùng của tôi đã hỏi liệu họ có thể "cài đặt một lần nhấp" từ exe 7-Zip không. Có một danh sách tham số khi tôi đang tạo kho lưu trữ. Có cách nào để thiết lập một số loại kết hợp các tham số để gọi trình cài đặt thực thi được trích xuất không?

Thật không may, tài liệu 7-Zip dường như không bao gồm kịch bản này. Tôi đã thấy một số ứng dụng phải trả tiền làm điều gì đó tương tự như vậy, nhưng tôi đang cố gắng giữ công cụ mà tôi đang viết không có mã được cấp phép để chúng tôi có thể sử dụng nội bộ.


Bạn có thể chỉ cho một số người trả tiền?
abhishek77in

Câu trả lời:


35

Bạn sẽ cần tải xuống LMZA SDK từ 7-Zip . Tệp "Installer.txt" chứa tài liệu:

7zSD.sfx là mô-đun SFX cho trình cài đặt. 7zSD.sfx sử dụng msvcrt.dll.

Các mô-đun SFX cho trình cài đặt cho phép tạo chương trình cài đặt. Mô-đun này trích xuất lưu trữ vào thư mục tạm thời và sau đó chạy chương trình đã chỉ định và xóa các tệp tạm thời sau khi kết thúc chương trình. Lưu trữ tự giải nén cho các trình cài đặt phải được tạo như tham gia 3 tệp: SFX_Module, Installer_Config, 7z_Archive. Installer_Config là tệp tùy chọn. Bạn có thể sử dụng lệnh sau để tạo lưu trữ tự giải nén trình cài đặt:

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

Bạn cần tạo một tệp config.txt.

Tập tin cấu hình chứa các lệnh cho Trình cài đặt. Tập tin bắt đầu từ chuỗi ;!@Install@!UTF-8!và kết thúc bằng ;!@InstallEnd@!. Tệp phải được viết bằng mã hóa UTF-8. Tệp chứa các cặp chuỗi:

ID_String = "Giá trị"

Title Tiêu đề cho tin nhắn

BeginPrompt Bắt đầu tin nhắn nhắc nhở

ProgressGiá trị có thể là "có" hoặc "không". Giá trị mặc định là "có".

RunProgramLệnh thực thi. Giá trị mặc định là "setup.exe". Chuỗi con %% T sẽ được thay thế bằng đường dẫn đến thư mục tạm thời, nơi các tệp được giải nén

DirectoryTiền tố thư mục cho "RunProgram". Giá trị mặc định là ". \"

ExecuteFile Tên tệp để thực thi

ExecuteParameters Các tham số cho "ExecuteFile"

Ví dụ:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!

1
Vâng. Tôi đã thử nó. Một chút khó chịu vì mọi thứ đều là dòng lệnh, nhưng bạn sẽ tìm thấy tài liệu tốt cho nó. Và tôi nhận được nén tốt nhất có sẵn miễn phí.
Ganesh R.

@MikeG - Liên kết đó kỹ lưỡng hơn nhiều. Nó giải thích làm thế nào để làm cho phần giải nén hoàn toàn trong suốt. Rất đẹp - Cảm ơn!
namuol

5
Lưu ý rằng "các mô-đun SFX đã được chuyển sang gói LZMA SDK" (có sẵn trên 7-zip.org ) kể từ phiên bản 9.35 beta.
Lukas

21

Giải pháp đồng ý là đúng, nhưng thực sự nó không giúp ích gì trong việc giải thích những gì bạn thực sự cần làm!. Tôi đã đọc điều này và nhiều giải pháp khác và tôi không thể tìm thấy hướng dẫn đơn giản và đầy đủ về cách thực hiện việc này.

Tôi bạn bối rối như tôi, xin vui lòng đọc bài viết trên blog của tôi cung cấp hướng dẫn từng bước về cách đạt được những gì Molly7244 đã đăng.

Cách tạo một kho lưu trữ tự giải nén chạy setup.exe của bạn với công tắc 7zip -sfx

Tôi đã nhận thấy rằng các liên kết có thể trở nên chết vì vậy, đây là các bước, từ blog của tôi

Bước 1 - Thiết lập thư mục cài đặt của bạn

Để dễ dàng tạo thư mục c: \ Install. Đây là nơi chúng tôi sẽ sao chép tất cả các tập tin cần thiết.

Bước 2 - 7Zip trình cài đặt của bạn

  1. Chuyển đến thư mục có .msi và setup.exe của bạn
  2. Chọn cả .msi và setup.exe
  3. Nhấp chuột phải và chọn 7Zip -> "Thêm vào Lưu trữ"
  4. Đặt tên cho kho lưu trữ của bạn là "Installer.7z" (hoặc tên bạn chọn)
  5. Nhấp vào Ok
  6. Bây giờ bạn sẽ có "Installer.7z".
  7. Sao chép tệp .7z này vào thư mục c: \ Install của bạn

Bước 3 - Nhận mô-đun mở rộng szx 7z-Extra

Bạn cần tải xuống 7z-Extra.

  1. Theo liên kết này để tải xuống 7Zip
  2. Bạn cần tải xuống phiên bản 9.20 (như @ tháng 5-2015) vì bản beta không chứa các tệp chính xác.
  3. Một liên kết tải xuống trực tiếp .
  4. Giải nén tệp 7zip
  5. Sao chép tệp "7zS.sfx" sang c: \ Install

Bước 4 - Thiết lập config.txt của bạn

Tôi khuyên bạn nên sử dụng NotePad ++ để chỉnh sửa tệp văn bản này vì bạn sẽ cần mã hóa trong UTF-8, các hướng dẫn sau đây là sử dụng notepad ++.

  1. Sử dụng windows explorer đi đến c: \ Install
  2. nhấp chuột phải và chọn "Tệp văn bản mới" và đặt tên là config.txt
  3. nhấp chuột phải và chọn "Chỉnh sửa bằng NotePad ++
  4. Nhấp vào "Menu mã hóa" và chọn "Mã hóa trong UTF-8"
  5. Nhập một cái gì đó như thế này:

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

Chỉnh sửa phần này thay thế [PHẦN MỀM v1.0.0.0] bằng tên sản phẩm của bạn. Ghi chú về các tham số và tùy chọn cho tệp cài đặt có ở đây

Điểm kiểm tra

Bây giờ bạn sẽ có một thư mục "c: \ Install" với 3 tệp sau:

  1. Trình cài đặt.7z
  2. 7zS.sfx
  3. config.txt

Bước 5 - Tạo kho lưu trữ

Các hướng dẫn này tôi tìm thấy trên web nhưng không nơi nào giải thích được bất kỳ bước nào trong 4 bước trên.

  1. Mở cửa sổ cmd, Window + R -> cmd -> nhấn enter
  2. Trong cửa sổ lệnh gõ như sau

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Hãy xem trong c: \ Install và bây giờ bạn sẽ thấy bạn có MyInstaller.exe

  4. Bạn đã hoàn thành

Chạy trình cài đặt

Nhấp đúp chuột vào MyInstaller.exe và nó sẽ nhắc với tin nhắn của bạn. Nhấn OK và setup.exe sẽ chạy.

Lưu ý về tự động hóa

Bây giờ bạn đã làm việc này trong thư mục c: \ Install, tôi sẽ tạo một tệp "Install.bat" và đặt tập lệnh sao chép vào đó.

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

Bây giờ bạn chỉ có thể chỉnh sửa và chạy Install.bat mỗi khi bạn cần xây dựng lại phiên bản mới của gói triển khai.


2
Đây phải là câu trả lời được chấp nhận!
noelicus

Có thể truyền một dòng lệnh arg cho ExecuteParametersmục trong config.txtkhông? Ví dụ: C:\Install\MyInstaller.exe some_file.txt sẽ thực thi setup.exe some_file.txt.
dthor

Đúng vậy Như matthew-lundberg đã nói trong câu trả lời của mình , "Các đối số được truyền cho tệp thực thi SFX được chuyển cùng với tập lệnh Install.cmd"
dthor

8

Bạn cũng nên nhìn vào NSIS . Với nó, bạn có thể tạo một trình cài đặt được nén với cùng phương thức mà 7-Zip sử dụng ( LZMA ), do đó, nó phải có cùng kích thước và bạn có toàn quyền kiểm soát quá trình cài đặt.


2

Dựa trên câu trả lời của jcrawfor74, đây là một số thông tin bổ sung:

Thay vì 7zS.sfx , bạn cũng có thể sử dụng tệp 7zS2.sfx . Đây là phiên bản nhỏ hơn nhiều (28 kB so với 140 kB) nhưng nó không hỗ trợ tệp config.txt. Vì vậy, bạn chỉ có thể để nó ra trong lệnh sao chép. Nếu bạn chỉ muốn tạo các tập lệnh cấu hình nhỏ, điều này cho phép bạn xây dựng các tệp EXE nhỏ hơn.

Mô-đun SFX nhỏ hơn không hỏi bất kỳ câu hỏi nào. Nó trích xuất các tệp vào một thư mục tạm thời như các mô-đun khác, và sau đó tìm thấy các ứng cử viên thực thi. Theo mã nguồn (cũng có sẵn trên trang tải xuống), trong C \ Util \ SfxSetup \ SfxSetup.c, nó cân các tệp khác nhau dựa trên tên và phần mở rộng của chúng và sau đó chọn tệp có điểm cao nhất.

Cả hai mô-đun SFX đều tự động chạy với tư cách Quản trị viên , ít nhất là trong Windows 10 và điều này không thể được cấu hình. Mặc dù hành vi này có thể được mong muốn cho các thiết lập toàn hệ thống, nhưng điều này có thể không phải luôn luôn như vậy. Ngoài ra, quyết định này chỉ dựa trên dữ liệu phiên bản tệp vì không có bảng kê khai nào bao gồm rõ ràng cho Windows biết phải làm gì. Khả năng tương thích của Windows nhìn vào tệp và tìm các chuỗi như "Thiết lập" dẫn đến dấu nhắc độ cao.

Nếu bạn cần một mô-đun SFX không yêu cầu quyền của Quản trị viên, bạn có thể xây dựng lại mô-đun SFX từ nguồn hoặc đơn giản hơn, chỉnh sửa thông tin phiên bản tệp của nó bằng trình chỉnh sửa tài nguyên như thế này . Chỉ cần xóa từ "Thiết lập" khỏi trường Mô tả tệp, trong trường hợp Trình hack tài nguyên được đề cập biên dịch tệp và lưu tệp EXE. Bạn cũng có thể thực hiện bước này trên tệp 7zS.sfx hoặc 7zS2.sfx trực tiếp và giữ nó ở đâu đó để bạn có thể sử dụng nó để xây dựng các gói SFX không nâng cao. Và bạn có thể sử dụng điều này để tùy chỉnh đầy đủ thông tin phiên bản tệp để đặt tên sản phẩm của bạn hoặc bất cứ thứ gì trong đó mô tả tải trọng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.