Чи можливо виконати файл після вилучення з 7-Zip архіву саморозпаковування архіву (SFX)?


40

Я намагаюся зробити стиснуту програму для розгортання.

В даний час я беру набір файлів, які я опублікував із свого IDE (Visual Studio 2008 - WPF опублікований додаток) і стискаю їх у 7-Zip SFX архіві.

Мої користувачі запитували, чи можуть вони "встановити одним клацанням" з 7-Zip exe. Під час створення архіву є список параметрів. Чи є спосіб встановити якусь комбінацію параметрів, щоб викликати виконуваний файл інсталятора, який витягується?

На жаль, документація на 7 Zip, схоже, не охоплює цей сценарій. Я бачив декілька платних додатків, які роблять щось подібне до цього, але я намагаюся утримати інструмент, який я пишу, без ліцензованого коду, щоб ми могли ним користуватися всередині.


Чи можете ви вказати на якісь платні?
abhishek77in

Відповіді:


35

Вам потрібно буде завантажити LMZA SDK з 7-Zip . Файл "installer.txt" містить документацію:

7zSD.sfx - це модуль SFX для інсталяторів. 7zSD.sfx використовує msvcrt.dll.

Модулі SFX для інсталяторів дозволяють створювати інсталяційну програму. Такий модуль витягує архів у темп-папку, після чого запускає задану програму та видаляє тимчасові файли після закінчення програми. Архів саморозпаку для інсталяторів повинен бути створений як об'єднання 3 файлів: SFX_Module, Installer_Config, 7z_Archive. Installer_Config - необов'язковий файл. Ви можете скористатися такою командою для створення архіву саморозпаку інсталятора:

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

Потрібно створити файл config.txt.

Файл Config містить команди для установки. Файл починається з рядка ;!@Install@!UTF-8!і закінчується;!@InstallEnd@! . Файл повинен бути записаний у кодуванні UTF-8. Файл містить пари рядків:

ID_String = "Значення"

Title Назва повідомлень

BeginPrompt Почніть повідомлення підказки

ProgressЗначення може бути "так" або "ні". Значення за замовчуванням - "так".

RunProgramКоманда для виконання. Значення за замовчуванням - "setup.exe". Підрядку %% T буде замінено на шлях до тимчасової папки, з якої були вилучені файли

DirectoryПрефікс каталогів для "RunProgram". Значення за замовчуванням ". \"

ExecuteFile Ім'я файлу для виконання

ExecuteParameters Параметри для "ExecuteFile"

Наприклад:

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

1
так. Я спробував це. Дещо незручно, бо все є командним рядком, але ви знайдете гарну документацію на нього. І я отримую найкращі компресії, доступні безкоштовно.
Ганеш Р.

@MikeG - Це посилання набагато ретельніше. Це пояснило, як зробити частину декомпресії повністю прозорою. Дуже приємно - Дякую!
namuol

5
Зауважте, що "SFX-модулі були переміщені до пакету SDK LZMA" (доступний на 7-zip.org ) станом на версію 9.35 бета-версії.
Лукас

21

Узгоджене рішення є правильним, але насправді це не допомагає пояснити, що насправді потрібно робити !. Я прочитав це та багато інших рішень, і не зміг знайти повних і повних простих інструкцій, як це зробити.

Я вас збентежив, як і я, будь ласка, прочитайте мій пост у блозі, який містить покрокові інструкції, як досягти того, що опублікував Molly7244.

Як зробити самостійно витягнутий архів, який запускає ваш setup.exe за допомогою перемикача 7zip -sfx

Мені було доведено, що посилання можуть стати мертвими, ось ось кроки з мого блогу

Крок 1 - Налаштування інсталяційної папки

Для цього легко створити папку c: \ Install. Тут ми скопіюємо всі необхідні файли.

Крок 2 - 7Зіправіть своїх інсталяторів

  1. Перейдіть до папки, у якій є ваш .msi та ваш setup.exe
  2. Виберіть як .msi, так і setup.exe
  3. Клацніть правою кнопкою миші та виберіть 7Zip -> "Додати в архів"
  4. Назвіть свій архів "Installer.7z" (або ім'я на ваш вибір)
  5. Натисніть Ок
  6. Тепер у вас повинен бути "Installer.7z".
  7. Скопіюйте цей .7z файл у свій каталог c: \ Install

Крок 3 - Отримайте модуль розширення 7z-Extra sfx

Вам потрібно завантажити 7z-Extra.

  1. Перейдіть за цим посиланням, щоб перейти до завантаження 7Zip
  2. Вам потрібно завантажити версію 9.20 (як @ травня 2015), оскільки бета-версія не містить правильних файлів.
  3. пряме завантаження посилання.
  4. Витягніть 7zip зайві файли
  5. Скопіюйте файл "7zS.sfx" в c: \ Install

Крок 4 - Налаштування config.txt

Я рекомендую використовувати NotePad ++ для редагування цього текстового файлу, оскільки вам потрібно буде кодувати в UTF-8, в наступних інструкціях використовується блокнот ++.

  1. За допомогою програми Windows Explorer перейдіть до c: \ Install
  2. клацніть правою кнопкою миші та виберіть "Новий текстовий файл" та назвіть його config.txt
  3. клацніть правою кнопкою миші та виберіть "Редагувати за допомогою NotePad ++
  4. Клацніть "Меню кодування" та виберіть "Кодувати в UTF-8"
  5. Введіть щось подібне:

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

Відредагуйте це, замінивши [SOFTWARE v1.0.0.0] на назву вашого продукту. Примітки щодо параметрів та параметрів файлу налаштування тут

CheckPoint

Тепер у вас повинна бути папка "c: \ Install" із такими 3 файлами:

  1. Інсталятор.7z
  2. 7zS.sfx
  3. config.txt

Крок 5 - Створіть архів

Ці інструкції я знайшов в Інтернеті, але ніде не пояснив жоден із 4 кроків вище.

  1. Відкрийте вікно cmd, Window + R -> cmd -> натисніть клавішу Enter
  2. У вікні команд введіть наступне

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Подивіться в c: \ Install, і тепер ви побачите, що у вас є MyInstaller.exe

  4. Ви закінчили

Запустіть інсталятор

Двічі клацніть на MyInstaller.exe, і він підкаже ваше повідомлення. Натисніть кнопку ОК, і setup.exe запуститься.

PS Примітка про автоматизацію

Тепер, коли у вас це працює в каталозі c: \ Install, я створив би файл "Install.bat" і помістив у нього сценарій копіювання.

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

Тепер ви можете просто відредагувати та запустити Install.bat кожного разу, коли вам потрібно буде відновити нову версію пакета розгортання.


2
Це має бути прийнята відповідь!
noelicus

Чи можна передати аргумент командного рядка до ExecuteParametersелемента в config.txt? Наприклад: C:\Install\MyInstaller.exe some_file.txt виконав би setup.exe some_file.txt.
dthor


8

Ви також повинні подивитися на NSIS . З його допомогою ви можете створити інсталятор, який стискається тим самим методом, який використовує 7-Zip ( LZMA ), тому він повинен бути приблизно однакового розміру, і ви маєте повний контроль над процесом встановлення.


2

Спираючись на відповідь jcrawfor74, ось додаткова інформація:

Замість 7zS.sfx ви також можете використовувати файл 7zS2.sfx . Це набагато менша версія (28 кБ проти 140 кБ), але вона не підтримує файл config.txt. Таким чином, ви можете просто залишити його в команді копіювання. Якщо ви просто хочете створити крихітні сценарії конфігурації, це дозволяє створювати менші файли EXE.

Менший модуль SFX не задає жодних питань. Він витягує файли у тимчасову папку як інший модуль, а потім знаходить виконувані кандидати. Відповідно до вихідного коду (також доступного на сторінці завантажень), у C \ Util \ SfxSetup \ SfxSetup.c вони зважують файли по-різному, залежно від їх імені та розширення, а потім вибирають файл найвищого балу.

Обидва модулі SFX автоматично працюють як адміністратор , принаймні в Windows 10, і це неможливо налаштувати. Хоча така поведінка може бути бажаною для системних налаштувань, це може бути не завжди так. Крім того, це рішення базується лише на даних файлової версії, оскільки не міститься маніфесту, який би чітко вказував Windows, що робити. Сумісність з Windows переглядає файл і знаходить рядки типу "Налаштування", які призводять до запиту висоти.

Якщо вам потрібен модуль SFX, який не вимагає дозволу адміністратора, ви можете відновити модуль SFX з джерела або простіше, відредагувати інформацію про його версію файлу за допомогою редактора ресурсів, як цей . Просто видаліть слово "Налаштування" з поля FileDescription, у випадку згаданого хакера ресурсів складіть файл та збережіть файл EXE. Ви також можете виконати цей крок у файлі 7zS.sfx або 7zS2.sfx безпосередньо та зберегти його десь, щоб ви могли використовувати його для створення не підвищених пакетів SFX. І ви можете використовувати це, щоб повністю налаштувати інформацію про версію файлу, щоб розмістити назву продукту або що-небудь в ньому, що описує корисне навантаження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.