我一直想知道的一件事是软件补丁是如何工作的.很多软件似乎只是在他们的二进制文件上发布需要安装在旧版本上的新版本,但是某些软件(特别是像Windows这样的操作系统)似乎能够发布非常小的补丁来纠正错误或为现有功能添加功能软件.
大多数情况下,我看到的补丁不可能取代整个应用程序,甚至是应用程序中使用的小文件.对我来说,似乎正在修改实际的二进制文件.
这些补丁实际上是如何实现的?任何人都可以向我指出解释其工作原理的任何资源,还是像在应用程序中替换诸如链接库之类的小组件一样简单?
我可能永远不需要以这种方式进行部署,但我很想知道它是如何工作的.如果我理解补丁只能修改二进制文件的某些部分是正确的,那么在.NET中可以做到这一点吗?如果它是我想学习它,因为这是我最熟悉的框架,我想了解它是如何工作的.
这通常使用二进制diff算法实现 - 将最近发布的版本与新代码区分开来.如果用户运行的是最新版本,则只需应用diff.特别适用于软件,因为编译代码在版本之间通常非常相似.当然,如果用户没有运行最新版本,则无论如何都必须下载整个版本.
通用二进制diff算法有两种实现方式:bsdiff和xdelta是很好的开源实现.我找不到.NET的任何实现,但由于所讨论的算法与平台无关,因此如果你觉得它是一个项目,那么移植它们应该不会太困难.