Как небольшие исправления программного обеспечения исправляют большое программное обеспечение?

StackOverflow https://stackoverflow.com/questions/145236

  •  02-07-2019
  •  | 
  •  

Вопрос

Меня всегда интересовало, как работают программные исправления.Многие программы, кажется, просто выпускают новые версии своих двоичных файлов, которые необходимо устанавливать поверх старых версий, но некоторые программы (в частности, операционные системы, такие как Windows), похоже, способны выпускать очень маленькие патчи, которые исправляют ошибки или добавляют функциональность к существующим. программное обеспечение.

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

Как на самом деле реализуются подобные патчи?Может ли кто-нибудь указать мне на какие-либо ресурсы, объясняющие, как это работает, или это так же просто, как заменить в приложении небольшие компоненты, такие как связанные библиотеки?

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

Это было полезно?

Решение

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


Существует несколько реализаций общих алгоритмов двоичного сравнения: bsdiff и xdelta являются хорошими реализациями с открытым исходным кодом.Я не могу найти никаких реализаций для .NET, но, поскольку рассматриваемые алгоритмы практически не зависят от платформы, портировать их не составит большого труда, если вы чувствуете себя проектом.

Другие советы

Если вы говорите об исправлении приложений Windows, то вам следует обратить внимание на файлы .MSP.Они похожи на .MSI, но содержат только патч и приложение.

Взгляни на Исправление и обновление в документах MSDN.

Файлы .MSP загружают обновленные файлы при установке приложения.Обычно это обновленные библиотеки DLL и файлы ресурсов, но может включать в себя любой файл.

Помимо исправления установленного приложения, также обновляются файлы восстановления, расположенные в C:\WINDOWS\Installer.Затем, если пользователь выбирает «Восстановить» в разделе «Установка и удаление программ», также используются обновленные файлы исправлений.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top