自动升级

车间几十台上位机怎么发版不跑断腿?自动升级、版本比对、增量更新与失败回滚实战

2026-10-10 09:14  //  上位机技术文章
首页 / 行业资讯 / 技术文章

上位机交付只是开始,改个报表格式、加个报警字段、修个偶发bug都叫发版。客户端装在十几台工位机上,靠U盘一台台拷,一上午没了,还漏一台,版本混着跑,出问题连日志都对不上。成熟做法是配个自动升级框架,启动自己看版本,有新包拉下来,重启就是新版。这东西不显眼,做不好特别折磨人,文件占用、替换失败、断网、回退,每个坑都得填。

为什么要做自动升级

手动发版痛在三处,版本不可控,十台电脑跑五个版本,有bug不知道哪些机器中招;停机长,生产时不能动只能等下班;人为出错,拷错目录覆盖配置,更新完起不来。自动升级就解决这三件事。典型流程,主程序启动前先跑独立升级器,问服务器要版本号,本地比对,有更新下载、校验、关主程序、替换文件、重新拉起,全程几十秒。升级器、主程序、升级服务器三个角色分清。升级服务器只放文件和清单、不主动连谁,防火墙只出不进,在工厂里部署阻力也小。

升级器为什么不能更新自己

Windows里运行中的exe和加载的dll被锁定,不能直接覆盖。主程序文件由升级器替换,因为检查时主程序还没启动。升级器自己怎么更新?它保持极简极少改,业务全放主程序和业务dll里,几年不发版;真要改就接力,新文件下载到临时位置,启动小批处理或辅助进程完成替换再重启。替换要等所有进程退出,包含后台进程,否则替换到一半文件占用,升级半残。杀毒软件偶尔拦截,现场把目录加白名单,提前跟厂内IT打招呼。日志和SQLite库文件开着的时候也锁,要更新同样放到程序关闭之后,或者干脆不放进升级包。

版本怎么比对,整包还是增量

版本用程序集版本号,四段数字,服务器维护清单文件列出每个文件的版本和哈希。整包比对看主版本号下载完整包,适合程序小内网快;文件级比对逐个比哈希只下变化文件,几十台同时更新差别明显;二进制补丁只下变化数据块但逻辑复杂,文件不够大不建议。下载要断点续传,30兆下到80%断了重来体验很差。完整性用哈希或签名校验,损坏被篡改都能发现,不过坚决不应用。清单要向后兼容,老客户端看到新清单不能崩。版本号涨法也讲规矩,修bug涨修订号、加功能涨次版本、大改涨主版本,清单本身也带版本,格式以后好扩展。

更新失败怎么回滚

最怕失败后系统起不来还干着生产。应用前先备份,本地留上一版完整副本,被替换文件改名备份,成功跑一轮再清理。替换要有事务感,全部成功才算,中途失败自动恢复,老版本照常启动。新程序首次启动自验证,配置连接资源检查一遍,不过主动回滚。数据库变更只做兼容式升级,能加列不删列,老程序面对新库能跑。再进一步灰度,先升一台观察一两天,再按机器车间逐步放开,有问题只影响一台。磁盘空间也要留够,备份叠几次塞满硬盘,新包还没下来先报警,清理旧备份时最近可用版本必须留着,别为省空间把后路断了。

落地还有哪些细节

升级时机,开机检查最简单,急着开工等不及,可以大版本开机更、小版本后台预下载下次启动生效。强制更新通道要有但慎用,服务器挂了客户端全卡,连不上时默认放行本地启动。配置文件不能被覆盖,各机器地址串口参数不一样,配置程序分离。日志要细,检查下载校验替换回滚每步落盘,远程看得到版本矩阵。多厂区内网可分级部署升级服务器。升级框架是基础设施,趁系统简单时搭好,等几百台机器跑五个老版本再补代价大得多。关键系统升级前先在测试环境跑一版,推送要有审批,别服务器一放文件,夜里几百台机器自己全更了,第二天出问题来不及。灰度按百分之五、百分之二十、全量的节奏走,版本矩阵汇总到管理页面,谁落后几个版本、上次成没成,一眼看到。

发版还靠U盘,先把版本清单和文件级比对做起来,省掉大半运维时间。赢式科技做上位机项目会把自动升级框架一起交付,电话15001875806,微信同号,可上门评估客户端现状。前期多花几天把这套东西搭好,后面每发一次版就省一次事,这笔账怎么算都值。