Как создать самораспаковывающийся архив, работающий на DOS?
Мне нужно создать самораспаковывающийся архив для DOS. Это унаследованный проект, который в настоящее время использует lha (Харуйасу Йошизаки) для создания самораспаковывающегося. Это работает, однако, когда он запускает, он спрашивает, хотим ли мы заменить когда-либо файл. Для сотен файлов это немного проблема.
Так что мне нужен способ создания исполняемых файлов, которые будут самораспаковываться и предоставлять опцию "да для всех" на экстракторе. Также очевидно, что он должен быть в состоянии работать на DOS.
Я искал в Интернете и могу найти программы, которые делают это, но все они, кажется, нуждаются в 32-битном.
3 ответа
Мне удалось найти способ сделать это с помощью Infozip
Вам необходимо скопировать UNZIPSFX.EXE в подходящее место, а затем объединить следующим образом:
> cd <folder to zip>
> zip -r app .
> copy /b <UNZIPSFX location>\UNZIPSFX.EXE+app.zip app.exe
> zip -A app.exe
Вы можете сделать это с ARJ, который вы можете скачать с http://arj.sourceforge.net/
Хитрость заключается в том, чтобы встроить параметры командной строки в исполняемый файл, что делается путем добавления комментария, который начинается с))
Например, если вы создаете текстовый файл с именем (например) options.txt, который содержит строку
)) -o
и сгенерируйте ваш самораспаковывающийся exe с помощью командной строки
arj A -JE -zoptions.txt TEST.EXE *.*
Тогда это автоматически перезапишет любые файлы (как если бы вы указали опцию -o в командной строке).
Варианты включают в себя:
используя arj (как упоминалось в другом месте на этой странице)
используя unzipsfx (как упоминалось в другом месте на этой странице)
использование другой программы, которая обрабатывает файлы LZH (вместо использования самораспаковывающихся файлов). Большинство архивных программ могут обрабатывать самораспаковывающиеся файлы (игнорируя самораспаковывающийся код в начале архива).
Возможно, самораспаковывающиеся файлы поддерживают опцию, например -y или /? или же -? или -h, например:
program.exe -y
Вы можете обойтись, используя echo или type. например:
эхо Y | program.exe
введите fileyyyy.txt | program.exe
Эта вертикальная черта - это труба: shift-backslash