Как сделать Repack?

Repack или переупаковка – это процесс создания инсталлятора программы, игры и т.п. с меньшим размером дистрибутива, чем оригинальный. Чаще всего Repack’у подвергаются компьютерные игры. В переупакованную версию могут быть внесены некоторые изменения, установлены последние обновления, добавлены сторонние компоненты и т.п.

Чтобы создать качественный Repack, возможно, потребуется затратить значительное время, все зависит от конкретной игры или программы.

Далее будет рассмотрен пример создания репака с использованием программных продуктов Inno Setup, ISTool и Precomp. Также для сжатия файлов будет использоваться архиватор с открытым кодом 7-Zip.

Первое, что следует сделать – это определиться для каких целей будет создаваться репак. Если вы хотите максимально сжать игру, чтобы записать ее на DVD диск, то следует знать, что не все можно ужимать до бесконечности. Например, установленную программу объемом 8Гб (ужать) до размера DVD диска получается крайне редко, все зависит от количества и типов файлов, сжимаемых архиватором.

Если вам хочется сделать красивый интерфейс установки программы, да и еще дополнить ваш репак дополнительными компонентами установки, то для этого вам придется прочитать много страниц справки по программе InnoSetup и просмотреть несколько примеров уже созданных скриптов.

 
 Как сделать или создать репак игры (Repack)?

Создать самый простейший репак возможно всего лишь с помощью двух программ – InnoSetup и ISTool. После ее установки и запуска, программа предложит создать скрипт с помощью мастера.  Но перед этим необходимо подготовить само приложение, которое будет переупаковываться. Как известно, все приложения прописывают в реестре определенную информацию, без которой многие из них не смогут работать. Поэтому необходимо сохранить записанные в реестре ключи, чтобы в дальнейшем их добавить в процессе установки. Зайдите в редактор реестра (нажмите сочетание Win+R и впишите REGEDIT) и откройте ветку HKEY_LOCAL_MACHINE — SOFTWARE, где следует искать записи по вашей игре или программе. После того, как искомая папка будет найдена выделите ее мышкой и по правой кнопке мышкой нажмите (Экспортировать) и сохраните ключ реестра в удобное место, например на (Рабочий стол).

Теперь вернемся к мастеру Inno Setup. На первом этапе вам необходимо задать имя программе, ее версию, указать разработчика и веб-страницу приложения. Вы можете не заполнять некоторые поля, но имя и версию программы лучше указать. Кликайте по кнопке (Далее) и переходите к следующему шагу. На этом шаге укажите месторасположение, куда будут устанавливаться файлы программы по умолчанию. Обычно это программная папка на системном диске (Program Files), но вы можете выбрать любую. Ниже укажите обязательно имя папки программ. Если этого не сделать, то программа будет устанавливаться в корень папки, а это может привести к печальным последствиям при ее удалении. Тут же можно установить или снять галочки (Позволять пользователю менять папку установки) – если вы хотите, чтобы у пользователя была такая возможность; (Приложение не нуждается в каталоге) – установите галочку, если для вашего приложения не нужна папка (обычно это один exe-файл, или приложение, которое устанавливается во временную папку).
На следующем шаге необходимо указать путь к исполняемому файлу программы, в окошке (Другие файлы приложения) и укажите папку с игрой или программой, которые будут в последствие сжаты внутренним компрессором.
На следующем этапе задайте имя папки в меню (Пуск), а также установите галочки, которые необходимы для создания ярлыков на рабочем столе, в меню быстрого запуска и другие, которые считаете необходимыми для вашей программы. На последнем этапе следует указать папку, куда будут сохраняться уже откомпилированные файлы (дистрибутив), имя исполняемого файла. Здесь же можно указать путь к иконке инсталлятора. После чего нажмите (Далее) и (Готово). Программа предложит создать еще один скрипт, нажимайте (Нет).
В результате работы мастера создается программный код (скрипт), который можно отредактировать. Поэтому сохраните его в удобном месте и продолжите работу.

Если создаваемый Repack программы или игры достаточно велик, то имеет смысл его разбить на части, чтобы размер частей был оптимальным для записи на 4,7Гб DVD диск. Для это в скрипте в секцию [Setup] следует добавить следующие строки:
SlicesPerDisk=3
DiskSpanning=true
DiskSliceSize=1457664000
После чего сохраните скрипт и закройте программу.

 

Теперь добавим в скрипт сохраненный ранее ключ реестра:

Для этого нам понадобиться утилита ISTool. Запустите ее и откройте скрипт, который был ранее создан с помощью Inno Setup. Выберите в левом меню подраздел (Registry) и кликнете по таблице справа правой кнопкой мышки. В контекстном меню следует выбрать пункт (Import From File…) и укажите путь к сохраненному reg-файлу.
После чего необходимо подправить секцию реестра в скрипте. Перейдите в подраздел (Script) и опуститесь вниз до секции [Registry]. Здесь будет строка, в которой следует найти параметр (ValueData:), после которого удалите всю строку до конца и вставьте на ее место: {app}; Flags: uninsdeletekey
Таким образом, после удаления программы ключ из реестра Windows также будет удален.

 

Теперь изменим уровень сжатия внутреннего компилятора:

Зайдите в меню (Options) и установите следующие значения:
(Compression) – (lzma), (Level) – ultra64
Установите галочку (Solid compression)
И задайте значение (Internal Compression) – ultra64
После чего нажмите кнопку (ОК) и сохраните скрипт.

После всего этого вы уже способны создать Repack. Для чего обратно откройте скрипт в Inno Setup и нажмите в меню кнопку (Компиляция). Будет создан установочный файл (exe) и один или несколько файлов с данными (bin). Проверить работоспособность Репака можно только пробной установкой программы.

Но не всегда созданный таким образом Repack удовлетворит пользователя, ведь сжатие lzma/ultra64 хоть и имеет максимальный уровень, не всегда способно сжимать любой тип файлов. Для более сильного сжатия файлов требуется использовать прекомпрессор – Precomp.

Прекомпрессор позволяет разжать сжатые файлы игры, чтобы в дальнейшем их сжать более мощным архиватором. Чаще всего прекомпрессии подвергают файлы ресурсов игры или программы, которые могут иметь размер от нескольких мегабайт до сотен мегабайт. Именно файлы ресурсов практически не сжимаются каким-либо архиватором.

Precomp, который может использоваться для прекомпрессии файлов, выпущен в нескольких версиях – это версия 0.38; 0.4; и 0.41. Выбор версии precompa практически не влияет на конечный результат, но при обратном процессе необходимо знать версии прекомпрессора, с помощью которой был разжат файл.

 

:Рассмотрим небольшой пример прекомпрессии файлов:

Итак, имеется исходный файл (Resource.DAT), для его сжатия воспользуемся прекомпрессором версии 0.38 (работа с остальными версиями нечем не отличается). Для удобства поместим этот файл в отдельную папку, в которую также следует положить фалы прекомпрессора (precomp038.exe, packjpg_dll.dll, zlib1.dll). Теперь необходимо создать BAT-файл, чтобы запустить прекомпрессию. Для этого открываем "Блокнот" и пишем следующую строку:

precomp038.exe -slow Resource.DAT

Сохраняем документ под любым именем в ту же папку с расширением bat.

 

Немного пояснений по синтаксису команды:

precomp038.exe – указывается исполняемый файл прекомпрессора;

-slow – режим работы прекомпрессора, в данном случае используется режим (slow) (медленный). Данный режим позволяет оптимально разжимать данные с минимальными затратами времени. Существует более быстрый параметр (-f), однако не всегда он способен достаточно разжимать данные. Есть и более глубокий метод анализа (-brute), однако его следует использовать лишь в тех случаях, когда режим (slow) не может разжать данные. Режим (brute) очень медленный, прекомпрессия выполняться может несколько часов для файла размером до сотни мегабайт, поэтому такой режим используют крайне редко;

Далее в синтаксисе идет имя файла. Здесь же можно указать полный путь к папке, если, например, файл располагается в другой папке, например: D:/Repack/Resource.DAT.

После того как файл BAT был сохранен, запустите его на выполнение двойным кликом мышки. Появится окно консоли (командной строки), где начнется процесс прекомпрессии с отображением процента выполнения задачи. По завершению прекомпрессии, консоль закроется, а в папке появится файл Resource.pcf. На данном этапе вам следует сравнить размер исходного и полученного файла. Файл Resource.pcf должен быть больше (ведь мы производим разжатие) файла Resource.DAT. Если разница в размерах незначительна, то придется использовать более глубокий уровень прекомпрессии (-brute). Если же выходной файл заметно больше исходного, то при его сжатии тем же 7-Zip вы получите значительно меньший архив, чем при сжатии исходного файла, тем же архиватором с тем же уровнем сжатия. Файлы PCF могут быть обработаны любым архиватором, но наиболее часто применяют 7-Zip и FreeArc, последний в некоторых случаях может дать более сильное сжатие.

Дополнительно перед архивированием файлы PCF могут быть еще обработаны Sper, чтобы добиться еще большего итогового сжатия. Но мы не будем рассматривать данный процесс, так как не всегда в нем есть потребность. Те кто заинтересуется подобной процедурой без труда найдет подробное описание в сети Интернет.

Таким образом, можно преобразовать все трудно сжимаемые фалы и в результате после архивирования вы получите размер дистрибутива значительно меньший, чем при простой компиляции скрипта в Inno Setup с максимальными настройками сжатия.

Для того, чтобы использовать полученный архив, в скрипт InnoSetup добавляется программный код. Нет нужды изучать язык программирования, чтобы написать такой код, все уже было сделано и отработано. Поэтому для использования архивов в установке программы или игры рекомендуется воспользоваться библиотекой ISDone. Библиотека умеет работать и распаковывать архивы 7-zip, rar, arc, pcf и srep. Данная библиотека имеет подробное руководство и пример ее использования, поэтому в данной статье не будем на этом останавливаться.

Довольно подробное руководство с примерами имеет и сама программа Inno Setup. В сети можно найти сборку этой программы, включающей всевозможные модули с примерами скриптов, которые способны реализовать самые разнообразные потребности пользователей: показ слайдшоу, проигрывание звука и флеш-анимации и многое другое. Конечно, чтобы разобраться в этих скриптах потребуется потратить некоторое время, так в них используется элементы программирования на языке Delphi.

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