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

71321
Mike G

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

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

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

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

35
Не могли бы вы указать на некоторые платные? abhishek77in 9 лет назад 0

4 ответа на вопрос

31
Matthew Lundberg

SFX модули для установщиков

SFX-модули для инсталляторов включены во внешний пакет (7z_extra). Вы можете скачать эти модули с www.7-zip.org. SFX-модули для инсталляторов (7zS.sfx и 7zSD.sfx) позволяют вам создать собственную программу установки. Такой модуль извлекает архив во временную папку пользователя, запускает указанную программу и удаляет временные файлы после ее завершения. Самораспаковывающийся архив для установщиков должен быть создан как объединяющий 3 файла: SFX_Module, Installer_Config, 7z_Archive. Кроме того, необязательный файл, Installer_Config, разрешен. Вы можете использовать следующую команду для создания установочного самораспаковывающегося архива:

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

Оптимально маленький размер установочного пакета может быть достигнут, если установочные файлы распаковываются перед включением их в архив 7z.

-y Переключатель для установщика модуля указывает тихий режим извлечения.

Источник

Чтобы указать программу для запуска после распаковки, используйте RunProgramатрибут. Например, вот пример, config.txtкоторый запускается Install.cmdпосле распаковки. Текущий рабочий каталог будет верхним уровнем развернутого archive.7zдерева, поэтому он Install.cmdдолжен находиться там.

;!@Install@!UTF-8! Title="Your Title" RunProgram="Install.cmd" ;!@InstallEnd@! 

Аргументы, передаваемые в исполняемый файл SFX, передаются в Install.cmdсценарий.

да. Я попробовал это. Немного неудобно, потому что все это командная строка, но вы найдете для этого хорошую документацию. И я получаю лучшее сжатие, доступное бесплатно. Ganesh R. 15 лет назад 0
Прочитав этот ответ, я нашел это: http://www.msfn.org/board/lofiversion/index.php/t39048.html Это в основном более длинная версия того, что размещено здесь. Это также объясняет (кратко), как сделать config.txt. Mike G 15 лет назад 4
@MikeG - эта ссылка гораздо более тщательная. Он объяснил, как сделать декомпрессионную часть полностью прозрачной. Очень мило спасибо! namuol 11 лет назад 0
Обратите внимание, что «модули SFX были перемещены в пакет LZMA SDK» (доступно на [7-zip.org] (http://www.7-zip.org/download.html)) начиная с бета-версии 9.35. Lukas 8 лет назад 2
18
jcrawfor74

Согласованное решение является правильным, но на самом деле оно не помогает объяснить, что вам действительно нужно делать !. Я прочитал это и многие другие решения, и я не мог найти полные и полные простые инструкции о том, как это сделать.

Если вы в замешательстве, как я, пожалуйста, прочитайте мой пост в блоге, который содержит пошаговые инструкции о том, как добиться того, что опубликовал 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 каждый раз, когда вам нужно пересобрать новую версию вашего пакета развертывания.

Это должен быть принятый ответ! noelicus 8 лет назад 2
Можно ли передать аргумент командной строки в пункт `ExecuteParameters` в` config.txt`? Например: `C: \ Install \ MyInstaller.exe some_file.txt` будет выполнять` setup.exe some_file.txt`. dthor 8 лет назад 0
Да, это. Как сказал Мэтью-Лундберг в [своем ответе] (http://superuser.com/questions/42788/is-it-possible-to-execute-a-file-after-extraction-from-a-7-zip-self -extracting-a / 42792 # 42792), «Аргументы, передаваемые в исполняемый файл SFX, передаются в скрипт Install.cmd» dthor 8 лет назад 0
7
Matthew Talbert

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

1
ygoe

Основываясь на ответе 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-пакетов без повышенных прав. И вы можете использовать это, чтобы полностью настроить информацию о версии файла, чтобы поместить название вашего продукта или что-нибудь в нем, что описывает полезную нагрузку.