gpt4 book ai didi

windows - 如何使用补丁更新应用程序文件?

转载 作者:可可西里 更新时间:2023-11-01 14:47:09 26 4
gpt4 key购买 nike

对任何自动更新解决方案感兴趣,例如 ClickOnce 或 MS Updater Block。对于任何想问为什么不这样做的人:我已经在使用这些并且它们没有任何问题,我只想了解任何有效的替代方案。

我想发布补丁 = 将以尽可能小的增量修改部署的现有文件的小差异。不仅代码需要打补丁,资源文件也需要打补丁。可以通过维护部署的两个独立同步副本来为运行代码打补丁(不需要对运行的可执行文件进行即时更改)。

应用程序本身可以 xcopy 部署(以避免 MSI 自动更正修改后的文件或破坏 ClickOnce 签名)。

  • 我想了解如何处理不同版本的补丁(例如,发布了修复一个错误的补丁,后来发布了修复另一个错误的另一个补丁(在同一文件中)- 用户可能有以下任意组合这些以及第三个补丁 - 在文本文件中,这可能很容易实现,但是可执行文件呢?( native Win32 代码与 .NET,有什么区别吗?)

  • 如果第一个问题对于可执行文件来说太难解决或无法解决,我想至少了解是否有一个解决方案可以通过串行修订实现简单的修补 - 为了安装修订版 5,用户必须拥有安装所有以前的修订以确保部署的有效性。

  • 补丁可以作为可从网站下载的文件发布 - 不需要直接从正在运行的应用程序提供自动补丁功能。

是否有任何现有的解决方案来实现这一点?

注意:关于 SO 的一些问题可能看起来像是重复的,但没有一个有好的答案。

这个问题是关于Windows平台的,最好是.NET。

到目前为止,wyUpdate似乎最适合这个问题。仍然对替代品感兴趣。

最佳答案

您将无法创建一个可应用于程序的多个版本的二进制补丁,因此以下情况将不可能发生:

      org+p1
/ \
+ p1 +p2 <-- note, p2 is the same patch both places
/ \
original org+p1+p2
\ /
+ p2 +p1 <-- ie. the p2 on this line is the same as the one above
\ /
org+p2

你将会遇到这样的场景:

      org v.2
/ \
+p1 +p4 <-- note, different patches now
/ \
org v.1 org v.4
\ /
+p2 +p3
\ /
org v.3

如果您想让您的用户挑选他们想要应用的修复程序,您应该很容易看出这会变得多么复杂。是的,这可以用文本文件来完成,毕竟,这就是分支和合并与大多数源代码控制工具一起工作的方式,但它们的工作基础是您可以在文件中插入和删除内容而不会影响文件的其余部分,并且不适用于可执行文件。

注意:一种特殊情况是替换字节但不从文件中插入或删除任何内容的修复。只要多个此类修复不重叠,就可以挑选您要应用的修复。然而,这样的补丁非常罕见。

正如您在问题中暗示的那样,您应该使用串行时间线,可能对现有版本使用单个修补程序,因此您可能会这样:

                                      +-- most up to date version
|
v
org v.1 org v.3 org v.4
\ / \ /
+p1 +p2 +p3 +p4
\ / \ /
org v.2 org v.4
\
+p1.1
\
org v.2 hotfix 1

至于实际代码,我有一个 diff/patch 实现,但它可能远非最佳。当前,为任何大文件生成补丁文件都需要很多时间。补丁相当小,但我敢说其他算法会产生更好的补丁。使用 bsdiff and bspatch 进行的样本测试产生较小的补丁。

但是,代码是here如果你想玩它。它是一个更大的类库的一部分,我不记得你只需要编译二进制补丁类就需要多少(库的其余部分),但它就在那里。您要使用的类是 Delta2类。

关于windows - 如何使用补丁更新应用程序文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com