Zip
7-zip - бесплатный архиватор, распространяющийся по лицензии GNU LGPL. Если вы с ним не знакомы, то более подробную информацию вы найдете на сайте 7-zip. С его помощью можно создавать безключевые SFX, хотя процесс их создания несколько длиннее, чем у WinRAR.
Для начала нужно запаковать содержимое нашей директории в 7-zip архив. Сделать это можно через 7-zip файл-медеждер. Запустив его, мы переходим в директорию, в которой находится административная установка Adobe. В эту же директорию нужно положить файл StartX.exe (его назначение я объясню ниже). Выделяем все файлы
и жмем Добавить
Именуем архив по желанию (скажем, Adobe7.7z), выбираем формат 7-zip, максимальный уровень сжатия и жмем ОК. На выходе получаем файл Adobe7.7z, из которого нам предстоит сделать SFX.
Теперь нужно создать конфигурационный файл для SFX. Его можно сделать в Блокноте. Единственное, но обязательное условие - он должен быть в кодировке UTF-8. В нашем случае он будет выглядеть так:
;!@Install@!UTF-8!
RunProgram="StartX.exe /WAIT \"msiexec /i Adobe7.msi /qn\""
;!@InstallEnd@!
Выглядит сложно, но сейчас все прояснится. Первая и последние строки просто обозначают начало и конец конфигурационного файла. Средняя строка - команда, которая будет выполнена после распаковки архива. Непосредственно команда заключается в кавычки и помещается после RunProgram=. Утилита StartX.exe
является эквивалентом консольной команды START и поддерживает такие же ключи. Ее наличие необходимо для установки MSI пакета, извлеченного из 7-zip SFX. Если попытаться сделать нечто вроде RunProgram="Adobe7.msi /qn", то запуск завершится ошибкой. Два обратных слэша (\) просто предваряют кавычки, находящиеся внутри команды.
Сохраняем конфигурационный файл с именем config.txt в ту же директорию, где Adobe7.7z, и переходим к завершающей стадии создания SFX.
Из инсталляционной директории 7-zip нужно взять SFX модуль 7zS.sfx и скопировать его к файлам Adobe7.7z и config.txt. Рекомендую сжать модуль утилитой UPX. Это уменьшит размер модуля примерно со 131 кб до 58 кб. Делается это командой
upx --best 7zS.sfx
Достаточно это сделать один раз, и можно использовать сжатый модуль в дальнейшем.
Теперь, когда в одной директории собраны все три файла (adobe7.7z, config.txt и 7zS.sfx), нужно из командной строки выполнить следующую команду
COPY /b 7zs.sfx + config.txt + adobe7.7z adobe7.exe
Через мгновение в директории появится файл adobe7.exe. Это и есть наш SFX. Его запуск инициирует распаковку архива во временную директорию, запуск команды из конфигурационного файла, и удаление распакованных файлов по окончании инсталляции.