一、前言

      前不久因公司产品需要完成了在线升级功能,因为编程技术不精,不敢冒然采用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框架太大,我还没这么大需求)点击这里

最新文章

  1. jq 模板
  2. java 构造方法
  3. node中的可读流和可写流
  4. Trace Sys
  5. OpenJudge计算概论-二维数组右上左下遍历
  6. linux进程调度函数浅析(基于3.16-rc4)
  7. vi快捷键必知必会
  8. Gridpanel多种操作帮助文档
  9. Inverse Quadratic Interpolation (website)
  10. 键盘控制div上下左右移动 (转)
  11. Django学习(五)---模板扩展,开发博客页面
  12. 如何抽象一个 Vue 公共组件
  13. 常用的几个PHP加密函数
  14. python 全栈开发,Day3
  15. c#下载文件选择路径控件
  16. Excel—宏表函数
  17. Lucene 02 - Lucene的入门程序(Java API的简单使用)
  18. #include 相关问题
  19. .NetCore简单学习图谱
  20. redis 版的 hello world

热门文章

  1. Swift enum(枚举)使用范例
  2. C# 工厂模式+虚方法(接口、抽象方法)实现多态
  3. Android中通过ActionBar为标题栏添加搜索以及分享视窗
  4. 非技术1-学期总结&ending 2016
  5. DBobjectsCompareScript(数据库对象比较).sql
  6. RTP与RTCP协议介绍(转载)
  7. 第14章 Linux启动管理(1)_系统运行级别
  8. Windows下Nginx配置SSL实现Https访问(包含证书生成)
  9. UWP开发:APP之间的数据交互(以微信为例)
  10. protocol buffers vs json vs XML