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

项目地址: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. linux 并发 RCU

    What is RCU, Fundamentally? https://lwn.net/Articles/262464/ If you can fill the unforgiving secondw ...

  2. 免费SSL-HTTS 申请与配置 NGINX配置

    Let's Encrypt是很火的一个免费SSL证书发行项目,自动化发行证书,证书有90天的有效期.适合个人使用或者临时使用,不用再忍受自签发证书不受浏览器信赖的提示.Let's Encrypt已经发 ...

  3. Mac系统终端命令行不执行命令 总出现command not found解决方法

    配置过安卓开发环境,改过bash_profile这个文件,最后不知怎么的只有cd命令能执行,我猜测可能修改bash_profile文件后没有保存 导致的     保存命令是:  source .bas ...

  4. Kylin(三): Saiku

    Saiku是一个轻量级的OLAP分析引擎,可以方便的扩展.嵌入和配置.Saiku通过REST API连接OLAP系统,利用其友好的界面为用户提供直观的分析数据的方式,它是基于jQuery做的前端界面. ...

  5. 【java】jackson 中JsonFormat date类型字段的使用

    为了便于date类型字段的序列化和反序列化,需要在数据结构的date类型的字段上用JsonFormat注解进行注解具体格式如下 @JsonFormat(pattern = "yyyy-MM- ...

  6. mvc 中关于资源文件的扩展

    namespace System.Web.Mvc { /// <summary> /// 扩展HtmlHelper /// </summary> public static c ...

  7. XE8 (RTM) Android SDK 更新安装(转)

    原地址:http://www.cnblogs.com/onechen/p/4379924.html 适用:XE8 Android 平台 问题:安装 XE8 RTM 时,如果勾选了 Android SD ...

  8. C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码

    C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码 上一篇说了在winform下进行调用cmd.exe执行ffmpeg.exe进行音频转换完整demo.后来我又需要移植这个 ...

  9. PHP购物车类

    <?php /** * 购物车类 */ session_start(); class Cart{ private static $ins = null; private $items = arr ...

  10. UVA 494 Kindergarten Counting Game

    题目大意:输入一个字字符串,输出该字符串中所包含的"word"个数,其中"word"是指连续的字母(大小写均可) 题目思路:其实这是道水题,不过我考虑的时候,太 ...