Преамбула
Была у меня такая идея создавать на лету SFX (Самораспаковывающийся архив) файлы средствами JAVAJAVA из коробки поддерживает работу с zip архивами, при том хотелось чтобы были соблюдены следующие условия
- Создание sfx архива должно работать из любой ОС
- Создание sfx архива должно быть реализовано в пределах JAVA
Облазив тырнет (где-то 2011 - 2012) я не нашел подходящего решения, из возможных решений было использование 7z, все хорошо, есть SDK, есть "модуль" SFX, кроме одного, оно работает с только 7z архивами (так было 2012)
Тогда было решено написать свой
О программе
Суть использования программы сводится к нескольким шагам
- Создать каким либо образом zip архив, тем же 7zip или средствами JAVA.
Назовем этот файл data.zip или еще как либо. - Создать текстовый файл с параметрами распаковки (куда распаковывать, что потом сделать).
Назовем этот файл options.txt или еще как либо. - Склеить файлы install.exe = zipsfx + options.txt + data.zip
Вот пример работающей версии:
Содержит два файла:
Шаг 1 - создание архива
Файл data.zipСодержит два файла:
- launcher.bat
- data/launcher-2.bat
data/launcher-2.bat в себе содержит следующий код:
@echo off
echo current dir "%CD%"
pause
echo current dir "%CD%"
pause
Шаг 2 - создание параметров
Файл options.txt
OPTIONS BEGIN {
# Hello text
hello = HELLO4 Test arguments
# Show hello text
showHello = false
# Show log progress
showLog = false
# Delete files on exit
deleteFiles = true
# Run after extract
run = cmd /C launcher-2.bat $args
workDir = $dir\data
# return exit code from run
return = true
# true - use temp dir; false - use current dir
useTemp = true
} OPTIONS END
run = cmd /C launcher-2.bat $args - указывает, что после распаковки, необходимо выполнить команду запуска bat файла
workDir = $dir\data - указывает, что выполнить надо команду, в под каталоге data, относительно распакованного каталога
deleteFiles = true - указывает, что по завершению, надо удалить фалы
Шаг 3 - склейка фалов
copy /b zipsfx + options.txt + data.zip test.exe
Выполнение того что получилось
Дистрибутив программы
Дистрибутив программы, а так же исходный код (лицензия MIT) расположен на сайте https://github.com/gochaorg/zipsfx-cppДистрибутив программы - это всего один файл (zipsfx), который не требует какой либо установки, он и является тем самым самораспаковывающийся архив, точнее заголовок exe файла.
Более подробное описание расположено на сайте github