工业级WPF 软件中基于差分算法的程序更新技术研究
熊珏
株洲中车时代电气股份有限公司 湖南省株洲市 412000
引言:在工业自动化与信息化深度融合的背景下工业级 WPF 软件于工业生产流程控制、设备监控及数据分析等领域的重要性日益凸显,这类软件因功能复杂、数据处理量大且对稳定性和实时性要求极高,为满足不断变化的工业需求需频繁更新迭代,而传统整包更新方式已难以适应其快速发展节奏。
一、差分算法基本原理
差分算法的核心思路是比对软件的旧版本和新版本文件,找出两者之间的不同之处,并把这些差异按照特定格式保存下来,形成差分文件,也就是更新包。在进行更新时,软件先读取旧版本文件,再依据差分文件里记录的差异信息,对旧版本文件进行相应的调整和完善,最终得到新版本文件。举例来说,针对文本文件,差分算法可能会一行一行地对比,记录新添加、删除或者改动的行;要是处理二进制文件,就通过对比字节或数据块来确定差异。这种依据差异进行更新的方法,避免了重复传送没有变化的内容,极大地降低了数据传输量。
二、常见差分算法类型
(一)字节级差分算法
如 bsdiff/bspatch 算法,基于 BSD 发布的算法,能够生成很小的二进制差分包。它通过仔细分析二进制文件的字节序列,找出新旧版本在字节层面的差异,常被用在嵌入式固件升级和 Linux 镜像差分场景中。Courgette 算法是 Google 为 Chrome 更新设计的字节级差分算法,针对可执行文件进行符号重写操作,能有效让差分包的体积变得更小[1]。
(二)块级/ 文件级差分算法
rsync 算法运用滚动校验和技术,把文件划分成大小一样的区块,通过计算不同版本文件区块之间的差别,只传输修改过的区块,既能用来进行文件同步,也能用于差分更新。XDelta3 算法以 VCDIFF 标准为基础,跨平台支持效果很好,在 TomTom、AliOS 等项目里被广泛使用,它通过对文件区块进行对比和处理,生成高效的差分文件。
(三)专用OTA 差分框架
Redstone Differential UpdateTool 是阿里巴巴支持的工具,可支持多版本一键生成差分包,很适合大规模 OTA(空中下载技术)场景,能大大提高更新包生成的效率,让管理更方便。Wind River Edge Sync 是面向汽车 OTA的端到端差分系统,采用模块化设计,有很高的安全性和可靠性,能满足汽车行业对软件更新十分严格的安全要求。微软提出的 Windows Forward/Reverse Differentials 技术,通过同时打包正向与反向差分,针对任意版本对优化更新包体积,已在 Windows10 和 11 补丁中应用,有效提升了操作系统更新的效率与灵活性。
三、基于差分算法的工业级WPF 软件更新流程
(一)更新包生成阶段
在工业级 WPF 软件发布新版本之前,开发团队会把软件的旧版本和新版本都提交到更新包生成服务器。服务器会依据选用的差异计算方法,考虑到 WPF 软件二进制文件的特性,挑选合适的按字节对比或按数据块对比的方式,对新旧版本的各类程序文件进行对比检查,这些文件包括 XAML文件、C# 代码编译后的二进制文件、资源文件等。举例来说,对于 XAML文件,会查看界面布局元素有哪些变动;对于二进制文件,会分析代码运行逻辑、函数调用等方面出现的改变。根据对比得到的结果,服务器制作出包含差异信息的更新包。要是采用的是按字节对比的算法,更新包里会详细记录每个字节的变化;如果是按数据块对比的算法,更新包则会记录文件数据块的新增、删除和修改情况。与此同时,为了保证更新包完整无误,服务器会对生成的更新包进行验证,计算校验和或哈希值等数据[2]。
(二)更新包传输阶段
工业现场的 WPF 软件客户端会定时向服务器询问版本情况。一旦客户端发现有新的版本,就会依据服务器反馈的更新包详情,像更新包容量、版本编号、校验数据等信息,判断是否要进行更新操作。要是客户端确定执行更新,就会启动从服务器获取更新包的流程。鉴于工业网络环境存在诸多不确定因素,比如网络信号时好时坏、传输速度受限等问题,在传输更新包的过程中,通常会采用断点续传技术,以此保证更新包能够完整无缺地下载下来。举例来说,当网络中断后重新连接上时,客户端可以接着上次没下载完的地方继续下载,不用从头再来。另外,为了保证数据在传输过程中的安全性,可选用 SSL/TLS 这类加密传输协议,避免更新包在传输途中被非法获取或遭到恶意修改。
(三)软件更新阶段
客户端下载完成更新包后需先进行完整性校验,即将下载所得更新包校验和与服务器提供的校验和对比,若一致则说明更新包完整无误。接着客户端会依据更新包中的差异信息并结合旧版本软件逐步实施更新,其中针对二进制文件要按差异信息对相应字节或数据块进行修改、插入或删除操作,针对资源文件如图像、样式文件等则根据更新包指示进行替换或新增。为防止更新失败导致软件无法使用,更新过程中通常会先备份旧版本软件,更新完成后客户端重启 WPF 软件以加载新版本从而完成整个更新过程,之后还会向服务器反馈更新结果以便其进行统计和管理。
结论:差分算法在工业级 WPF 软件更新中优势显著,通过仅传输新旧版本差异部分有效减少数据传输量,能适应工业网络环境的复杂性与带宽限制。在更新包生成、传输及软件更新全流程中,差分算法结合加密传输和完整性校验等技术可保障更新的安全性与可靠性,而备份旧版本软件的机制则能进一步降低更新风险以确保软件稳定运行。该算法的应用为工业级 WPF 软件的高效更新提供有力支持,可满足工业自动化与信息化深度融合背景下软件快速迭代的需求。
参考文献:
[1] 苏章良 , 周新亭 , 蔡文生 , 等 . 一种 WPF 应用程序间的快速切换方法及处理终端 .CN202211373930.2.
[2] 马睿、冯俊、张文健、汪菊琴 . 小型化图传巡检车系统及其 WPF 和Android 应用开发 [J]. 电脑编程技巧与维护 ,2020(11):3-4.
作者简介:熊珏(1995.03.30),女,汉族,湖南常宁人,本科,助理工程师,研究方向:光电信息科学与工程