写了一个自动更新服务网站和自动更新客户端。基本功能测试完毕。记录下

项目地址:https://github.com/TeemoHQ/AutoUpdate

需求

热替换自我更新,自动集成,回退版本,守护进程,服务端操作,更新维度,脚本控制(bat)多个客户端。

介绍



 
 

AutoUpdateServer采用Nancy WEB框架。

功能:1.提供上传文件的接口

2.匹配文件并且建立多个不用客户端的文件仓库

3.打包,提供更新包,

AutoUpdateClient采用控制台

功能:1.循环请求服务端,检查当前客户端是否需要更新

2.检查客户端是否空闲

3.更新客户端文件

4.脚本控制客户端特殊文件

5.检查客户端进程是否关闭,如果关闭则打开(非更新状态下)

客户端

功能:提供当前是否空闲接口


新的知识点梳理

1.Nancy.Forms authentication

2.Nancy CSRF防御

3.Nancy 静态文件的使用

4.7ZIP 压缩解压

5.命名管道通讯

6.自动更新算法逻辑

其他:Nancy IIS部署的时候的权限释放,CRC包的加密,log4net

核心算法

核心的算法都在服务端(大部分时间差不多都花在这里。改了四五次)

1.匹配文件。生成更新包。一开始是通过文件version属性,但发现有些文件没有version属性,找到更好的方法。下面贴出方法。

        private static bool isTheSame(FileInfo f1, FileInfo f2)
{
using (var md5 = MD5.Create())
{
byte[] hash1, hash2;
using (var stream = f1.OpenRead())
hash1 = md5.ComputeHash(stream);
using (var stream = f2.OpenRead())
hash2 = md5.ComputeHash(stream);
return hash1.SequenceEqual(hash2);
}
}
 

2.文件仓库管理算法(代码就不贴了。说下逻辑)

//1.第一次上传的时候或者当前没有出新文件的时候。和模板文件匹配.

BaseModel是基文件,因为每个客户端其实类似,部分DLL不同而已。所以第一次都先匹配这个

//2.第二次开始:

//  A【修改】.上传文件和本地文件都存在,对比不同,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)

//  B【不变】.上传文件和本地文件都存在,对比相同,不复制文件,设置上传文件version为老版本文件的version(存入数据库时)

//  C【新增】.上传文件存在,本地文件不存在,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)

//  D【删除】.上传文件不存在,本地文件存在。暂时不操作。

3.控制回滚 (代码不贴)

逻辑:数据库记录每次上传的文件版本信息。回滚时就想减,就拿到新的文件

 

效果图:

 

 

Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序的更多相关文章

  1. C#<热血传奇>服务端源代码再次给力更新

    前段时间一直在忙公司项目,最近抽点空稍微把部分代码重新整理一下(代码太久没碰很多地方都忘记了 囧~~~) 此次还是更新服务端,并修正上一版里面存在的很多指针 异常BUG...  (代码比较烂,还请各位 ...

  2. 携程apollo配置中心服务端如何感知配置更新?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  3. 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  4. SVN 服务端 和 客户端

    网址大全  |  EF CodeFirst  |  电视  |  MyNPOI  |  开源  |  我的皮肤  |  ASP.NET MVC4  |  前端提升  |  LINQ  |  WCF   ...

  5. WCF心跳判断服务端及客户端是否掉线并实现重连接

    WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...

  6. [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用

    1.  服务器基本安装即问题解决记录      √ 2.  SVN环境搭建和客户端使用 2.1  服务端 和 客户端 安装    √ 2.2  项目建立与基本使用     √ 2.3  基本冲突解决, ...

  7. oauth2.0服务端与客户端搭建

    oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...

  8. vertx 从Tcp服务端和客户端开始翻译

    写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...

  9. SVN1.6服务端和客户端安装配置指导

    本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1 ...

随机推荐

  1. ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问

    sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...

  2. windows下使用ffmpeg进行视频转换和截图。

    author:fanfq(xiaoban) Email:fangqing.fan#gmail.comlink:http://fanfq.iteye.com/admin/blogs/655569chan ...

  3. 承接Unreal4外包虚幻外包,北京正规公司

    VR产业链的现状 去年Facebook 20亿美元收购虚拟现实技术Oculus VR,提高了大家对VR设备.而国内,红杉资本投资蚁视,更是引爆了资本市场对VR/AR 的关注.其中有四块是我们较为常见且 ...

  4. How to backup your blogs on cnblogs

    This is an alternative to OfflineExplorer. Thanks for this article[1] which is listed in Reference s ...

  5. JVM--标记-清除算法Mark-Sweep

    前言 垃圾自动回收机制的出现使编程更加的简单,使得我们不需要再去考虑内存分配和释放的问题,而是更加的专注在我们产品功能的实现上.但是我们还是需要花时间去了解下垃圾收集机制是怎么工作的,以便后面能够更好 ...

  6. OAF_开发系列26_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(案例)

    20150730 Created By BaoXinjian

  7. JS中两个感叹号!!的意义

    var foo = true; console.log(!foo); // false console.log(!!foo); // true 两个 !! 就是 非非 如果值为boolean值 两个感 ...

  8. C# 托管和非托管混合编程

    在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难.   最直接的实现托管与非托管编程的方法就是 ...

  9. 25+ Useful Selenium Web driver Code Snippets For GUI Testing Automation

    本文总结了使用Selenium Web driver 做页面自动化测试的一些 tips, tricks, snippets. 1. Chrome Driver 如何安装 extensions 两种方式 ...

  10. LeedCde 题解目录

    1. Longest Palindromic Substring ( 最长回文子串 ) 2. Median of Two Sorted Arrays (两个排序数组的中位数) 3. Sqrt(x) 4 ...