2010-02-11 73 views
1

你能帮助我们理解一般的修补程序或更新如何在代码级别上适用于已编译和实时应用程序?如何修补或更新编译后的应用程序?

我的意思是,如果我们想在某段代码中修复错误(或改进功能),那么已经编译过的代码会发生什么变化?

+0

是什么让你觉得修补正在使用?你在谈论ASP.NET影子程序集吗? – 2010-02-11 19:33:11

+0

找到所有修补程序都很少见;带宽和媒体非常便宜,只需重新分配新的组件就简单多了。一个明显的例外是那些巨大的打包游戏数据/媒体文件。 – Aaronaught 2010-02-11 19:36:32

+0

@Aaronaught:对于安全更新它是相关的。 – 2010-02-11 19:40:07

回答

1

你说的是用二进制比较算法完成的。

这样的算法找出了现有的二进制文件和目标二进制文件之间的差异。这通常比再次发送整个文件少得多,因此速度更快。如果您推送的更新与安全性相关,则速度是相关的,因为速度更快的客户获得补丁的机会越少。

请参阅thisthis了解编译可执行文件的二进制比较算法实现的最新和最好的实现。

+0

感谢您的详细信息+1。所有这些可以总结如下:一般来说,更新应用程序的常见做法只是替换可执行文件,但有时(例如谷歌)使用更高级的方式来查找和替换部分不同的代码? – rem 2010-02-12 08:10:12

+0

是的,除了替换不是“代码的部分”,它是二进制文件的一部分。另外,正如Aaronaught所说,游戏经销商通常以这种方式分发补丁,就像Adobe IIRC一样。所以这比你想象的更普遍。特别是当你有大量的数据和/或大量的客户推送你的更新。 – 2010-02-12 08:35:11

1

很可能你只需要用新的编译版本替换二进制文件,并确保它们仍然可以与所有相关的库一起工作。

+0

谢谢Thomas,+1。所以,如果我得到某些应用程序的Service Pack的分配,并且它的大小为1 GB,这并不意味着所有这些1 GB的数量都有变化,但只是这是整个可执行文件的另一个副本,以前安装,仅包含一些更改? – rem 2010-02-12 08:18:06

+1

这取决于应用程序,但它可能是这种情况。通常这个可执行文件没有1千兆,所以这个服务包只能替换相关的库和可能的可执行文件,这可能仍然比所有资源的应用程序大小小得多。 – 2010-02-12 09:39:09

相关问题