【问题标题】:How do small software patches correct big software?小软件补丁如何纠正大软件?
【发布时间】:2010-09-13 19:11:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: patch software-distribution


    【解决方案1】:

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


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

    【讨论】:

    • 我会用 is 或至少通常 is 替换“can be”。
    【解决方案2】:

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

    查看 MSDN 文档中的Patching and Upgrading

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

    除了修补已安装的应用程序外,位于 C:\WINDOWS\Installer 中的修复文件也会更新。然后,如果用户从添加/删除程序中选择“修复”,则更新的补丁文件也会被使用。

    我认为 John Millikin 讨论的二进制差异方法必须在其他操作系统中使用。虽然你可以让它在 Windows 中工作,但它会有点陌生。

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 2011-03-04
      • 2018-09-26
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2021-11-26
      相关资源
      最近更新 更多