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

项目地址: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. This is a TEST

    I LOVE LINUX && PHP VERY MUCH AND MORE, ALL OPEN SOURCE PROJECT

  2. linux memory

    http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/ http://duartes.org/gustavo/ ...

  3. Oracle常用的性能诊断语句

    --1.阻塞及等待事件信息查询 -- 查询所有会话的状态.等待类型及当前正在执行的SQL脚本 select se.SID, se.SERIAL#, se.Status, se.Event, se.BL ...

  4. 【转】windows server 2012清除并重建SID

    windows server 2012清除并重建SID 2012-09-17 17:51:51 标签:SID windows server 2012 原创作品,允许转载,转载时请务必以超链接形式标明文 ...

  5. [转载]Eclipse调试Java的10个技巧

    原文:http://www.oschina.net/question/82993_69439 我也特别喜欢的是Drop to frame. 在看这篇文章前,我推荐你看一下Eclipse 快捷键手册,我 ...

  6. php://input

    从官网信息来看,php://input是一个只读信息流,当请求方式是post的,并且enctype不等于"multipart/form-data"时,可以使用php://input ...

  7. linux 添加静态ip dns

    /etc/network 下:interfaces auto loiface lo inet loopbackauto eth0iface eth0 inet staticaddress 192.16 ...

  8. [wxWidgets] 2. 重访“Hello World” 程序

    这是四年多来在博客园的第二篇博客.有了上一次的排版使用经验,这一篇文章应该有些进步(^_^). 闲话按下不表,言归正传.在编译.成功运行了上一个helloWorld.cpp(后文中'hw'简称hell ...

  9. tokudb引擎磁盘空间不足导致写入失败的调查

    故障现象 2016.1.1号早上4点左右,zabbi数据库服务器报警,写入数据失败.登陆机器后检查发现磁盘空间使用95%没有用满,进去zabbix数据库,执行insert命令提示错误“errir 10 ...

  10. VMware10.06精简版安装后台运行

    VMware10.06精简版安装时会出现一个安装功能选择菜单,里面有一条后台运行必选功能,一般人会跳过条.当你打算在服务器上用vmware时,一定要安装后台运行服务,否则你无法换出正在运行的后台虚拟机 ...