Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序
写了一个自动更新服务网站和自动更新客户端。基本功能测试完毕。记录下
项目地址: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自动更新服务端和客户端保护更新程序的更多相关文章
- C#<热血传奇>服务端源代码再次给力更新
前段时间一直在忙公司项目,最近抽点空稍微把部分代码重新整理一下(代码太久没碰很多地方都忘记了 囧~~~) 此次还是更新服务端,并修正上一版里面存在的很多指针 异常BUG... (代码比较烂,还请各位 ...
- 携程apollo配置中心服务端如何感知配置更新?
引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...
- 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?
引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...
- SVN 服务端 和 客户端
网址大全 | EF CodeFirst | 电视 | MyNPOI | 开源 | 我的皮肤 | ASP.NET MVC4 | 前端提升 | LINQ | WCF ...
- WCF心跳判断服务端及客户端是否掉线并实现重连接
WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...
- [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
1. 服务器基本安装即问题解决记录 √ 2. SVN环境搭建和客户端使用 2.1 服务端 和 客户端 安装 √ 2.2 项目建立与基本使用 √ 2.3 基本冲突解决, ...
- oauth2.0服务端与客户端搭建
oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...
- vertx 从Tcp服务端和客户端开始翻译
写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...
- SVN1.6服务端和客户端安装配置指导
本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1 ...
随机推荐
- ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问
sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...
- windows下使用ffmpeg进行视频转换和截图。
author:fanfq(xiaoban) Email:fangqing.fan#gmail.comlink:http://fanfq.iteye.com/admin/blogs/655569chan ...
- 承接Unreal4外包虚幻外包,北京正规公司
VR产业链的现状 去年Facebook 20亿美元收购虚拟现实技术Oculus VR,提高了大家对VR设备.而国内,红杉资本投资蚁视,更是引爆了资本市场对VR/AR 的关注.其中有四块是我们较为常见且 ...
- How to backup your blogs on cnblogs
This is an alternative to OfflineExplorer. Thanks for this article[1] which is listed in Reference s ...
- JVM--标记-清除算法Mark-Sweep
前言 垃圾自动回收机制的出现使编程更加的简单,使得我们不需要再去考虑内存分配和释放的问题,而是更加的专注在我们产品功能的实现上.但是我们还是需要花时间去了解下垃圾收集机制是怎么工作的,以便后面能够更好 ...
- OAF_开发系列26_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(案例)
20150730 Created By BaoXinjian
- JS中两个感叹号!!的意义
var foo = true; console.log(!foo); // false console.log(!!foo); // true 两个 !! 就是 非非 如果值为boolean值 两个感 ...
- C# 托管和非托管混合编程
在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是 ...
- 25+ Useful Selenium Web driver Code Snippets For GUI Testing Automation
本文总结了使用Selenium Web driver 做页面自动化测试的一些 tips, tricks, snippets. 1. Chrome Driver 如何安装 extensions 两种方式 ...
- LeedCde 题解目录
1. Longest Palindromic Substring ( 最长回文子串 ) 2. Median of Two Sorted Arrays (两个排序数组的中位数) 3. Sqrt(x) 4 ...