一、前言
前不久因公司产品需要完成了在线升级功能,因为编程技术不精,不敢冒然采用Socket方法实现在线升级,所以使用比较方便稳妥的WCF方式
如果考虑并发能力的话还是Socket>WCF>Remoting,所以如果你是Socket专家的话这篇你就不用看了。
二、流程
本篇主要讲述一个完整的升级思路,如果你正需要实现升级请结合你公司的情况与自身情况作出调整
1. 从本地读取公司的注册表信息:
一般公司软件产品都会在客户机的Local_Machine下将产品信息写入,包括:产品名称,安装路径,安装日期,产品版本等等,以方便日后升级点击这里
2. 通过WCF服务的ReadUpdateInformation方法(名字自己定义)读取更新文件服务器上的信息,并与注册表上的版本信息进行对比,判断是否需要升级:
假如客户端读出的产品信息为18.0.0,服务器读取的某个更新压缩包的文件名称为18.0.1,说明要升级了。
不推荐将客户机上产品所有的dll与服务器上更新压缩包里所有的dll进行对比,太麻烦! 不如直接对比名称并下载全覆盖来的方便
3. 将需要升级的信息返回到客户机的升级界面上,如果用户选择升级,则可以通过WCF服务的GetFile方法断点续传下载文件点击这里
4. 将客户机下载完的文件进行MD5检查,并通过WCF服务的ServerFileMD5方法得到更新文件的MD5值并返回进行对比点击这里
5. 对比成功后让用户选择是直接更新还是下次开机自动更新:
其实更新就是个File.Copy的过程,重要的还是你能否完整的正确的下载完更新包,更新程序中最后一部别忘了修改注册表信息,将新的版本与更新时间写入!
开机自动更新的方法在此:点击这里
三、其他
WCF的部署点击这里
用户升级界面 我使用WPF来实现,MVVM使用的是轻量级的MVVMLight (Dev的MVVM框架太大,我还没这么大需求)点击这里