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

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

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

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

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


person Dan Herbert    schedule 28.09.2008    source источник


Ответы (2)


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


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

person John Millikin    schedule 28.09.2008
comment
Я бы заменил можно на есть или, по крайней мере, обычно так и есть. - person Vinko Vrsalovic; 28.09.2008

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

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

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

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

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

person John Dyer    schedule 28.09.2008