Программное обеспечение для применения исправлений различий в Windows

Мне нужно установить старую версию (N) продукта. Однако его производитель отказался от полной загрузки в пользу ужасного установщика на основе лаунчера, и для версии, которая меня интересует, был выпущен только патч от предыдущей версии (N-1).

Мне удалось получить и успешно установить версию N-1, так как это был просто набор zip-пакетов. Однако патч для версии N содержит diff-заплаты (расширения .rdiff и .xdiff) для пакетов данных (zip-файлы), и хотя я пытался заставить Launcher установить их, но это не удалось и данные были повреждены. (никогда не работал с такими патчами)

Что я знаю об этих патчах diff:

  • это различия для пакетов данных (zips)
  • Я знаю, какая разница для какого пакета (по имени файла)
  • диффы не запутаны, менеджер архива может получить доступ к данным в них (хотя есть "неожиданный конец архива")

Хотя у меня нет готовой машины с Linux, я могу, если нужно, работать с программным обеспечением для пингвина. Я могу загрузить его с флешки (например, с помощью загрузчика .iso), у меня также есть флешка, достаточно большая, чтобы поместить на нее все данные, поэтому возможности NTFS не требуются.

(Я не тороплюсь, поэтому, пожалуйста, не торопитесь, чтобы дать хороший ответ;) У меня будет доступ к машине с этими файлами через ~ 6 часов, и в любом случае это не критично)


Редактировать №1:

Хотя вчера мне не удалось получить доступ к рассматриваемым файлам, я немного поработал с Google+мозгом.

Видимо софта для того что мне нужно просто не существует, а сам патч сделан на еретический манер.

Файлы выглядят так, будто созданы с помощью утилиты rdiff-backup , в которой, если я не слепой, отсутствует возможность применить обратный патч без настройки репозитория.

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

А теперь еретическая часть, обратный патч diff сделан для превращения более новой версии в более старую ... и эта компания использовала его для применения инкрементного патча? Фу...

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

Не могли бы вы опубликовать отрывок из файлов .rdiff и .xdiff? (например, первые 10 строк) Аргументы командной строки, используемые во время diffоперации, часто влияют на patchкоманду, которую вы должны использовать.
Я мог бы, данные вовсе не секретные, но, как я уже писал, мне потребуется некоторое время, прежде чем я смогу вернуться к компьютеру с этими файлами. (сейчас компилирую )
Как только я увидел эту синюю компиляцию, я только что понял, что это будет отличный xkcd :D
@NicolasRaoul Мне потребовалось больше времени, чем я ожидал, чтобы найти время для этой задачи, но мне удалось ее преодолеть. Хотя мне удалось заставить программу запуска приложений правильно устанавливать старые обновления, я также собрал достаточно ноу-хау, чтобы сделать это вручную. Спасибо за подсказку с заголовком файла, я использовал программный идентификатор файла, чтобы сказать мне, какой софт для сравнения использовать (я никогда не ожидал, что будет так много типов различий), что привело меня к тому, как передать их утилите запуска.
Если ваш вопрос решен, не могли бы вы опубликовать ответ, описывающий, как вы его решили? Спасибо!
Могу, после того как закончу компиляцию ;) У меня сейчас нет моей базы данных закладок, которую я создал в ходе своих исследований. Ответ примет форму руководства, как найти правильный софт для diff, так как мое решение специфично для моей проблемы.

Ответы (1)

Хотя, в конце концов, я не применил исправления различий вручную (мне удалось заставить программное обеспечение применять старые обновления), преследование этой цели привело к достаточному ноу-хау для этого (что показало мне, как «исправить» упомянутое средство обновления программного обеспечения) .

Первым шагом является определение типа diff. Текстовый, двоичный, каталоговый, инкрементальный, декрементный (обратный)... и тогда вам нужно выяснить его точную реализацию. Ух, боль!

Есть несколько подсказок о том, с каким типом патча diff вы имеете дело:

  1. расширение файла
  2. заголовок файла
  3. библиотеки, используемые в целевом средстве обновления программного обеспечения

В моей задаче я имел дело со следующими расширениями файлов.

  • бдифф
  • xdiff
  • rdiff
  • wdsfc

Проверяя заголовки файлов (подписи), которые обычно состоят из двух (word) или четырех (dword/int) байтов. Хотя поиск необработанных подписей не увенчался успехом, мне удалось найти это полезное программное обеспечение File Identifier , в базе данных которого был хотя бы один из форматов diff. (Я добавлю подписи, с которыми я столкнулся в более позднем редактировании)

Результаты были следующими:

  • bdiff: Binary Diff, в моем случае это был формат DeltaMAX , хотя в его коммерческом решении вы можете использовать примеры двоичных файлов (у .NET лучший графический интерфейс) из загружаемой демонстрации для применения отдельных исправлений. Также можно определить по файлу DeltaMax.dll. Подходит для новичков в Windows.
  • xdiff: Cross Diff (не уверен в названии), это вспомогательный класс с сервера Xmail , должен находиться в библиотеке libxdiff. Пример реализации существует в PHP , но на данный момент (PHP 5.5.14) его нельзя использовать без перекомпиляции. Практически неприменим в Windows.
  • rdiff: Reverse Diff, поставляется с librsync или реализующим его программным обеспечением. Крайне сложно использовать в Windows.
  • wdsfc: в моем случае это был просто файл для замены оригинального, а не диф. (если только вы не назовете 100% разницей), замените им исходный файл.

(Да, это программное обеспечение настолько прекрасно, что оно использует четыре типа исправлений вместе с обычными обновлениями...)

Короче говоря, Windows — очень плохая платформа для работы с патчами различий. В любом дистрибутиве Linux вы можете найти большую часть необходимого программного обеспечения в репозиториях (DeltaMAX предназначен только для Windows, но должен нормально работать в Wine), и даже если будет доступен только исходный код, его гораздо проще скомпилировать на любом Penguin, чем устанавливать все необходимое. на машине Windows.