Форум программистов, компьютерный форум, киберфорум
Софт: Архивирование и бэкап
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.08.2016
Сообщений: 1

XDelta Recursive Patch Maker

10.08.2016, 00:11. Показов 2946. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Recursive Patch Maker (RPM) - утилита предназначенная для создания бинарных патчей. С ее помощью вы сможете с легкостью сопоставить две версии файлов и записать разницу между ними для последующего обновления. Особенно это актуально при больших объемах данных, когда необходимо заменить/перекачать крупный файл, к примеру 2Гб, тогда как изменений в его исходниках по факту буквально на несколько килобайт.
Данная утилита является полностью консольной и как понятно из заголовка основана на другой утилите под названием xDelta.
Естественно существуют программы для осуществления операции по созданию патча из директории, однако 99% из них имеют убогий и неудобный интерфейс с нечитабельными настройками. Ко всему прочему добрая часть из них не предоставляет возможности собрать свой инсталлятор, что в свою очередь ведет к ограничению вариативности.

Чем же так хорош RPM?

1. Основан на проверенных утилитах xdelta, bincomp, freearc.
2. Создает и применяет рекурсивные «заплатки».
3. Простая, понятная и минималистичная настройка параметров.
4. Последующее использование с Inno компилятором.

Структура приложения

- modules
-- modules\arc.exe (модуль freearc, предназначен для архивации)
-- modules\arc.sfx (расширение freearc, для создания sfx архивов)
-- modules\bincomp.exe (утиль для проверки различий между файлами)
-- modules\xdelta3.exe (последняя стабильная версия 3.0.11)
- builder.exe
- config.ini (конфигурационный файл для билдера)
- patcher.exe

Использование билдера

Ниже представлена дефолтная конфигурация для билдера. Разберем ее параметры по порядку.

[COMPARING]
Original — Папка с исходными/оригинальными файлами
Modified — Папка с измененными файлами, которые должны быть получены после применения патча

[FLTERS]
excludefolders — Папки которые будут исключены из списка патчей ["FolderName", "FolderName\Subfolder"]
excludefiles — Файлы которые будут исключены из списка патча ["FileName.exe", "*Name", "Name*", "*Name*"]
excludeexts — Файлы с расширениями которые будут исключены из списка патча ["*.dll", "*.txt"]

[FILENAMES]
missedfolder — Название директории в которой будут храниться отсутствующие файлы из мод. папки
patchfolder — Название директории в которой будут храниться созданные файлы патчей
fileslist — Название файла с списком путей модифицированной папки (это просто текстовый файл. имя и расширение может быть абсолютно любыми)

[COMPRESSION]
compressing — Параметр отвечающий за вкл или откл компрессии с помощью Freearc
arcpass — Пароль архива (пустой по дефолту)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
; Comparing folders
[COMPARING]
original=C:\Windows
modified=D:\Windows
 
; Add `*` as any symbol and any length. Leave empty [] if you dont need any rules.
; To exclude folders or subfolders ["FolderName", "FolderName\Subfolder"]
; To exclude files by full name ["FileName.exe"], by a part of name ["*Name", "Name*", "*Name*"]
; To exclude files with specific extension ["*.dll", "*.txt"]
[FILTERS]
excludefolders=[]
excludefiles=[]
excludeexts=[]
 
; Update folder, Patch folder, Files list
[FILENAMES]
missedfolder=rpm_update
patchfolder=rpm_patch
fileslist=fileslist.info
 
; Enable/Disable archiving [0|1]
; You cant use special chars in password(!@#$%^&*()+{}[]><?|\/:; etc.)
[COMPRESSION]
compressing=0
arcpass=

Использование патчера

В следующем листинге перечислены доступные на данный момент внешние передаваемые параметры.

-t — Заголовок отображаемый в консоли и последующих блоках внутри скрипта *
-n — Название директории в которой будет производится применение патчей
-p — Название директории в которую будет распаковываться архив с патчами
-u — Название директории в которую будет распаковываться архив с обновлениями
-l — Название файла с списком путей
-psw — Пароль, если был задан в конфиге

* Использование кириллических символов возможно, но нежелательно
* Дефисы передаваемые в параметрах будут заменены на пробелы ( -t My-Patch-Name => -t My Patch Name )
* Параметры содержащие пробельные символы заключайте в кавычки ( "My Application Title" )

Code
1
2
3
4
5
6
 -t [title] (default: Recursive Patch Maker)
 -n [patched folder name] (default: rpm_new)
 -p [patch folder name] (default: rpm_patch)
 -u [update folder name] (default: rpm_update)
 -l [file with pathes list] (default: fileslist.info)
 -psw [archive password] (default: null)

Скрипт Inno Setup

В следующем листинге представлен самый простой скрипт для Inno, позволяющий создать установочный визард.
В дефайнах для удобства заданы переменные, которые изменяются в соответствии с создаваемым патчем. Для их работы обязательно должен быть включен препроцессор.
Все они разбиты на отдельные сорсы, однако возможно использование и из директории (Source: {#rpmPath}{#updFolder }*

appID — ID созданного ранее в Inno Setup визарда (опционально)
appName — Название приложения
version — Версия
rpmPath — Путь до папки с утилитой RPM
updFolder — Название папки с патчем, созданной RPM
patcherName — Название исполняемого файла (по умолчанию patcher.exe)
updName — Название exe архива с обновлением
patchName — Название exe архива с патчем
fileListName — Название файла с списком путей
parameters — Параметры для RPM патчера

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define appID '36E6CAF2-C966-44E3-A0FB-339CC862C640'
#define appName 'Demo Patcher'
#define version '0.0.1'
#define rpmPath 'С:\RPM [build 1.0.0]'
#define updFolder '20151107.53638'
#define patcherName 'patcher'
#define updName 'rpm_update'
#define patchName 'rpm_patch'
#define fileListName 'fileslist.info'
#define parameters '-t "Заголовок"'
 
[Setup]
AppID={{{#appID}}
AppName={#appName} - Update {#version}
AppVersion={#version}
DefaultDirName={pf}\{#appName}
OutputDir=D:\
OutputBaseFilename=-01-{#appName}-{#version}
SolidCompression=true
UsePreviousAppDir=true
AppendDefaultDirName=false
DirExistsWarning=false
Uninstallable=false
Compression=lzma2/Ultra64
InternalCompressLevel=Ultra64
 
[Files]
Source: {#rpmPath}\{#patcherName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\modules\xdelta3.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#updName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#patchName}.exe; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
Source: {#rpmPath}\{#updFolder}\{#fileListName}; DestDir: {app}; Flags: ignoreversion deleteafterinstall;
 
[Run]
Filename: {app}\{#patcherName}.exe; Parameters: "{#parameters}"; WorkingDir: {app}; StatusMsg: Updating..;
Скачать: https://sourceforge.net/projects/xdeltapatchmaker/
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.08.2016, 00:11
Ответы с готовыми решениями:

Error, recursive assignment
for i to n do Steps := place(i, o, 1); Heights] := Heights]+(1/5)*n end do НЕ МОГУ ПОНЯТЬ В ЧЕМ ОШИБОЧКА

Predicates for recursive functions Prolog
Доброе время суток! Я новичок в Prolog. Нам задали написать предикаты к рекурсивным функциям f(x,y)= 0 if x=0 1 if...

With recursive update postgres очень сложно
У меня есть запрос, который выводит пользователей у которых дата регистрации позже даты их первого заказа: select u.user_id,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2016, 00:11
Помогаю со студенческими работами здесь

Python telebot и sqlite3 (Recursive use of cursors not allowed)
Есть телеграм бот, который отправляет сообщения, получая информацию из бд sqlite3: @bot.message_handler(regexp=config) def...

Write a recursive function in C or C++ to calculate the Nth number in the Fibonacci sequence
Write a recursive function in C or C++ to calculate the Nth number in the Fibonacci sequence

Boost search recursive Al Drewes odds with files PATH, a specificity extension
Я видел этот код, ему не хватает несколько вещей, которые мне нужно https://www.cyberforum.ru/cpp-beginners/thread1495885.html#post7858054 ...

Diff patch
Помогите использовать команды diff patch Файл 1.txt: jms.context.factory=qwertyu jms.broker.external.url=tcp://11111111111111 ...

Patch.exe
Пользуюсь программой, на которую стоит ограничение по пользования в сутки. Мне сказали, чтобы как бы обойти ограничение надо перезагрузить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru