代码之家  ›  专栏  ›  技术社区  ›  Marek

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

  •  3
  • Marek  · 技术社区  · 16 年前

    我想出版

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

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

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

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

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

    到目前为止, wyUpdate

    1 回复  |  直到 9 年前
        1
  •  6
  •   Lasse V. Karlsen    16 年前

    您将无法创建一个可应用于程序多个版本的二进制修补程序,因此无法执行以下情况:

          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
    

    很多 bsdiff and bspatch 生成较小的面片。

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

    推荐文章