客户端程序一个很大的不便的地方就是程序集更新,本文这里简单的介绍一种通用的客户端更新方案。这个方案依赖程序集的动态加载,具体方案如下:

将程序集存储在一个文件数据库中,客户端所有程序集直接从文件数据库中加载,数据库中主要存储内容包括:

  • 程序集名称
  • 程序集大小
  • md5信息
  • 程序集内容

客户端启动的时候,从数据库中动态加载程序集,可以直接使用Assmbly.Load,也可以参考我之前文章介绍的.net加载失败的程序集重新加载实现动态加载。

客户端更新流程如下:

  1. 该程序集数据库服务器一份,客户端一份
  2. 程序启动时,首先将本地的程序集目录(程序集名称和md5信息)发送给服务器,服务器根据客户端目录生成需要更新的差异程序集数据库,并返回给客户端。
  3. 客户端根据接收到的差异数据库更新本地程序集数据库。

先更新,后启动

  1. 每次启动前,首先更新程序集,
  2. 更新程序集完成后,然后再加载程序集。

这个方式有点是,实现简单,缺点主要是延长了启动时间

先启动,后更新

  • 主程序启动过程中,下载差异数据库,然后提示程序重新启动
  • 程序重新启动的过程中,首先合并差异数据库,然后再加载程序集。

这种方案不影响客户端启动,但如果更新的时候有一个重启动作,对客户端不够友好,适合于更新频率较小的场景。

边更新,边启动

对于客户端来说,往往由于加载了一些第三方的主题库,导致本身启动速度就很慢,需要SplashScreen来过渡。这个过渡时间可以用来并发更新程序集

  1. 启动时,首先加载主屏程序需要显示,但又不怎么会更新的本地程序集(往往是一些第三方的控件),同时显示SplashScreen。
  2. 加载这些程序集的同时,获取需要更新的程序集数据库,更新本地程序集数据库。
  3. 更新程序集数据库和加载首屏程序集完成后,正常继续启动。

这个方式既不影响启动速度,又没有重启的动作,但逻辑较复杂些,还需要考虑到一些冲突(例如,已经加载了需要更新的程序集)。

一个.net程序客户端更新方案的更多相关文章

  1. .net程序客户端更新方案

    原文:.net程序客户端更新方案 客户端程序一个很大的不便的地方就是程序集更新,本文这里简单的介绍一种通用的客户端更新方案.这个方案依赖程序集的动态加载,具体方案如下: 将程序集存储在一个文件数据库中 ...

  2. Windows 程序自动更新方案: Squirrel.Windows

    Windows 程序自动更新方案: Squirrel.Windows 1. Squirrel Squirrel 是一组工具和适用于.Net的库,用于管理 Desktop Windows 应用程序的安装 ...

  3. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  4. Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序

    演示TCP的传输的客户端和服务端的互访 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息. 客户端: 1.建立Socket服务,指定要连接方朵和端口 2.获取Socket流中的输出流,将数 ...

  5. 基于Quick-cocos2d-x的资源更新方案 二

    写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick ...

  6. fir.im Weekly - iOS / Android 动态化更新方案盘点

    动态化更新是 App 开发必然面对的问题.在 iOS 环境下,Apple 开发者们像是" 带着手铐脚镣跳舞" ,相比之下 Android 开发者会轻松一点,有很多相关的开源框架帮助 ...

  7. Unity3D 热更新方案(集合各位专家的汇总)

    http://blog.csdn.net/guofeng526/article/details/52662994 热更新”这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技 ...

  8. C#开发微信门户及应用(47) - 整合Web API、微信后台管理及前端微信小程序的应用方案

    在微信开发中,我一直强调需要建立一个比较统一的Web API接口体系,以便实现数据的集中化,这样我们在常规的Web业务系统,Winform业务系统.微信应用.微信小程序.APP等方面,都可以直接调用基 ...

  9. 移动端热更新方案(iOS+Android)

    PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5% ...

随机推荐

  1. sql查询语句优化

    http://www.cnblogs.com/dubing/archive/2011/12/09/2278090.html 最近公司来一个非常虎的dba  10几年的经验 这里就称之为蔡老师吧 在征得 ...

  2. A*算法改进——Any-Angle Path Planning的Theta*算法与Lazy Theta*算法

    本文是该篇文章的归纳http://aigamedev.com/open/tutorial/lazy-theta-star/#Nash:07 . 传统的A*算法中,寻找出来的路径只能是沿着给出的模型(比 ...

  3. 编写灵活、稳定、高质量的 HTML 代码的规范

    不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 嵌套元素应当缩进一次(即两个空格 ...

  4. Burp-Suit之Interder

    登陆页面:http://localhost/pentest/brute/login.php 设置代理,使用Burp截断: 发送到Intruder进行爆破,这里我先说明一下Intruder页面 Inte ...

  5. LEARN HOW TO HACK

    出处:https://www.hackerone.com/hacker101 什么是HACKER101? https://hacker101.com/Hacker101是一个视频,资源和实践活动的集合 ...

  6. camera驱动框架分析(上)

    前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera.我这里主要讨论前者, ...

  7. 清理电脑文件夹中的Thumbs.db文件

    @echo off del f:Thumbs.db /f/s/q/a exit 对应修改磁盘号, 保存批处理文件执行即可

  8. springcloud中Feign配置详解

    Spring Cloud中Feign配置详解 到目前为止,小伙伴们对Feign的使用已经掌握的差不多了,我们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,我们要如何 ...

  9. 破解验证码模拟登陆cnblogs

    from selenium import webdriver from selenium.webdriver import ActionChains from PIL import Image imp ...

  10. Python发送邮件:smtplib、sendmail

    本地Ubuntu 18.04,本地Python 3.6.5, 阿里云Ubuntu 16.04,阿里云Python 3.5.2, smtplib,sendmail 8.15.2, 今天,打算实现通过电子 ...