欢迎来到天天文库
浏览记录
ID:12072069
大小:1014.50 KB
页数:31页
时间:2018-07-15
《桌面软件的智能更新——magicupdate更新原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、桌面软件的智能更新——MagicUpdate更新原理作者:陈秋明Email:qmroom#126.com [#=@] 测试环境:Win2000/XP/2003/Vista/Windows7关键字:更新、多线程、断点续传、Ftp、Exe互嵌 MagicUpdate下载,请与本人联系本文PDF下载 索引1 摘要:...21.1 使用到的技术:...21.2 更新流程...31.3 模块划分...32 界面展示...53 网络及多线程技术...73.1 多线程下载和断点续传...73.2 Ftp上传下
2、载...73.3 多线程与主线程(界面)的数据交互...84 更新细节...104.1 更新模式...104.2 文件结构设计...104.2.1 服务器端文件信息...114.2.2 客户端文件信息ClientConfig结构...134.2.3 管理端文件信息ManagerConfig结构...144.2.4 宏说明及文件路径的计算...154.3 更新详细流程...164.3.1 管理端流程...164.3.2 客户端流程...174.4 客户
3、端命令行...184.5 自我升级...195 小结...20 1 摘要:随着桌面软件文件的增多增大、版本升级频繁,有时因为改动了几个很小的几个dll文件,客户不得不从网站上重新下载整个安装包。并且开发人员不得不从繁忙的工作中抽出大量的时间来维护版本的升级,导致开发成本增加、维护难度大等诸多问题。有没有更完美的解决方案,来让软件自动升级到新版本呢?答案当然是肯定的。在当今网络技术技术迅速发展的时代,各个软件厂商各有各自的升级方法,现在我就谈谈我的解决方案。1.1 使用到的技术:关键技术:l 多线程管理及交互l
4、 Http下载和断点续传l Ftp上传下载l Vc++对Xml读写解析l Md5算法l 可执行程序Exe的相互嵌套控件技术:l 自定义三态树形控件CTreeCtrl和CListCtrl的互动l 自定义CListCtrl,实现控件互嵌(进度条、编辑框、下拉框)l 控件的自绘制 1.2 更新流程1. 管理端上传当前版本的文件到服务器;2. 客户端先自我更新,然后更新产品。获取服务器信息,判断是否需要更新。若需要则提示
5、用户更新。1.3 模块划分 2 界面展示管理端:客户端:自动模式下的更新提示:升级程序自我更新: 3 网络及多线程技术3.1 多线程下载和断点续传桌面软件的升级的方法有很多,如何自动的升级,当然少不了数据传输程序。为了能够穿透防火墙在广域网使用我采用了基于http的下载。原理大致如下:1. 创建一个的空文件,大小为需要下载的文件大小+零时数据大小;2. 创建多个线程,同时利用CreateFile共享写打开临时文件,移动文件指针到数据块开始区域;3. 使用WinNetAPI,建立多个服务
6、器连接,向服务器请求同一个文件的不同数据段的数据保存到同一个临时文件,并保存已下载的数据大小;4. 数据都读完后,修改文件大小为原来大小。若下载中途网络中断,下次下载时,则可以从尾部文件信息中获取已下载的大小,便于继续上一次的下载。实现起来当然要考虑诸多细节方面,由于篇幅有限,就不详细说明。3.2 Ftp上传下载利用WinNet函数很容易实现Ftp的上传下载,这里就不详细说明。3.3 多线程与主线程(界面)的数据交互交互的实现很复杂,用到了指针,回调函数,自己的消息队列等。要全部讲清楚确不容易,我就简要介绍一下。1.
7、定义消息结构typedefstruct_NotifyW3ctPara{ int nIndex; //同一个下载文件中线程索引 UINTnNotityType; //消息类型 DWORD dwContent; //通过StartDownload参数传入的值 LPVOID lpNotifyData; //消息数据 W3CT*pThread; //下载模块指针}NotifyW3ctPara;
8、2. 定义消息存储数组和回调函数typedefCArray
此文档下载收益归作者所有