首页 > 软件自动升级框架设计

软件自动升级框架设计

如何设计一个好的桌面软件更新框架?

现在软件目录是这样。

一堆DLL+一个EXE主程序

我目前更新设计是这样.
启动时候检查更新,如果需要更新,则下载文件到临时目录。但是如何覆盖? exe正在使用DLL。无法覆盖的。最好能保持只运行一次exe,要不然杀毒软件会提示正在调用可疑的exe。


专门准备一个简单的updater的程序(可以用参数调整配置就好)
启动的时候(或者不定期)把updater打开,如果没有更新就自己退出
如果有更新就关掉主程序(当然需要用户确认),开始升级,完成后重新打开主程序,然后自己悄悄退出


在你的程序入口,先查看本地update目录有没有update的文件,如果有就先update那些dll,之后在load程序的dll,然后程序启动。程序启动后要有个update进程负责检查有么有update,如果有就负责下载update,下载完成后,提醒用户有update,用户选择update就重新启动程序。

这样只需要一个exe就可以了,不过这个exe不能被update,所以这个exe里面只能包含最精简的逻辑


建议程序本身和控制程序升级的程序分开,也就是2个exe。
同时服务端发布一个清单列表,里面包含构成当前运行exe的各个组成部分的字节数及其MD5,以及版本,这样控制升级的exe可以通过检测清单列表里的内容来判定哪些部分需要更新(单独更新哪些dll还是程序整体)。程序启动的时候保证更新的程序同时也是启动的,其他的逻辑由控制程序来控制,当程序退出后不再锁定工作目录,更新程序完成更新。

更新程序如果本身也是有可能升级的,这种情况如果也有很大可能会出现,则可以在服务端也设置一个配置接口,在需要更新时,用浏览器跳转进行数据更新程序整体的安装包。

这样的话,假设程序本身为A, 负责更新的程序为update,角色关系如下
A的更新由update负责,update的跟新由浏览器下载负责

【热门文章】
【热门文章】