Можно ли выполнить файл после извлечения из архива самораспаковывающегося архива (SFX) 7-Zip?

40

Я пытаюсь сделать сжатое приложение с возможностью развертывания.

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

Мои пользователи спросили, могут ли они «установить в один клик» из 7-Zip exe. При создании архива есть список параметров. Есть ли способ установить какую-то комбинацию параметров, чтобы вызвать исполняемый файл установщика, который извлечен?

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

Майк Г
источник
Не могли бы вы указать на некоторые платные?
abhishek77 в

Ответы:

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.

Файл конфигурации содержит команды для установщика. Файл начинается со строки ;!@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 были перенесены в пакет LZMA SDK» (доступно на 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. Нажмите Ok
  6. Теперь у вас должен быть «Installer.7z».
  7. Скопируйте этот файл .7z в ваш каталог c: \ Install

Шаг 3 - Получить модуль расширения 7z-Extra sfx

Вам необходимо скачать 7z-Extra.

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

Шаг 4 - Настройте ваш config.txt

Я бы порекомендовал использовать NotePad ++ для редактирования этого текстового файла, так как вам потребуется кодировать в UTF-8, следующие инструкции используют notepad ++.

  1. С помощью проводника Windows перейдите в 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@!
    

Отредактируйте это, заменив [ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ v1.0.0.0] названием вашего продукта. Замечания о параметрах и опциях для установочного файла находятся здесь

Контрольно-пропускной пункт

Теперь у вас должна быть папка «c: \ Install» со ​​следующими 3 файлами:

  1. Installer.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, и он предложит вам сообщение. Нажмите OK, и файл setup.exe запустится.

PS Примечание по автоматизации

Теперь, когда вы работаете с этим в вашем каталоге c: \ Install, я бы создал файл «Install.bat» и поместил в него скрипт копирования.

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

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

jcrawfor74
источник
2
Это должен быть принятый ответ!
noelicus
Можно ли передать аргумент командной строки в ExecuteParametersэлемент в config.txt? Например: C:\Install\MyInstaller.exe some_file.txt выполнит setup.exe some_file.txt.
dthor
Да, это. Как сказал в своем ответе Мэтью-Лундберг: «Аргументы, передаваемые исполняемому файлу SFX, передаются в скрипт Install.cmd»
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 просматривает файл и находит строки типа «Setup», которые приводят к запросу на повышение прав.

Если вам нужен модуль SFX, который не запрашивает разрешения администратора, вы можете перестроить модуль SFX из исходного кода или, проще, отредактировать информацию о версии файла с помощью редактора ресурсов, подобного этому . Просто удалите слово «Setup» из поля FileDescription, в случае упомянутого Resource Hacker скомпилируйте файл и сохраните файл EXE. Вы также можете выполнить этот шаг непосредственно для файла 7zS.sfx или 7zS2.sfx и сохранить его где-нибудь, чтобы использовать его для создания SFX-пакетов без повышенных прав. И вы можете использовать это, чтобы полностью настроить информацию о версии файла, чтобы поместить название вашего продукта или что-нибудь в нем, что описывает полезную нагрузку.

ygoe
источник