9

我一直想知道的一件事是软件补丁是如何工作的。许多软件似乎只是在其二进制文件上发布了需要安装在旧版本之上的新版本,但一些软件(尤其是像 Windows 这样的操作系统)似乎能够发布非常小的补丁来纠正错误或为现有的添加功能软件。

大多数时候,我看到的补丁不可能替换整个应用程序,甚至是应用程序中使用的小文件。在我看来,实际的二进制文件似乎正在被修改。

这些补丁是如何实际实施的?任何人都可以向我指出任何解释其工作原理的资源,还是就像替换应用程序中的链接库之类的小组件一样简单?

我可能永远不需要以这种方式进行部署,但我很想知道它是如何工作的。如果我的理解是正确的,补丁实际上只能修改二进制文件的一部分,那么这可以在.NET 中实现吗?如果是我想学习它,因为这是我最熟悉的框架,我想了解它是如何工作的。

4

2 回答 2

14

这通常使用二进制差异算法来实现——将最近发布的版本与新代码进行差异。如果用户运行的是最新版本,您只需要应用差异。对软件特别有效,因为编译后的代码通常在版本之间非常相似。当然,如果用户没有运行最新版本,那么无论如何您都必须下载整个内容。


有几个通用二进制差异算法的实现:bsdiffxdelta是很好的开源实现。我找不到 .NET 的任何实现,但由于所讨论的算法与平台无关,因此如果您喜欢一个项目,移植它们应该不会太难。

于 2008-09-28T05:07:16.137 回答
2

如果您正在谈论修补 Windows 应用程序,那么您想要查看的是 .MSP 文件。这些类似于 .MSI,但只是补丁和应用程序。

查看MSDN 文档中的修补和升级

.MSP 文件的作用是将更新的文件加载到应用程序安装中。这通常是更新的 dll 和资源文件,但可以包括任何文件。

In addition to patching the installed application, the repair files located in C:\WINDOWS\Installer are updated as well. Then if the user selects "Repair" from Add / Remove programs the updated patch files are used as well.

I'm thinking that the binary diff method discussed by John Millikin must be used in other operating systems. Although you could make it work in windows it would be somewhat alien.

于 2008-09-28T12:03:17.633 回答