自动升级系统OAUS的设计与实现(续) (附最新源码)

简介:   (最新OAUS版本请参见:自动升级系统的设计与实现(续2) -- 增加断点续传功能) 一.缘起       自从 自动升级系统的设计与实现(源码) 发布以后,收到了很多使用者的反馈,其中最多的要求就是希望OAUS服务端增加自动检测文件变更的功能,这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误。

  (最新OAUS版本请参见:自动升级系统的设计与实现(续2) -- 增加断点续传功能

一.缘起    

  自从 自动升级系统的设计与实现(源码) 发布以后,收到了很多使用者的反馈,其中最多的要求就是希望OAUS服务端增加自动检测文件变更的功能,这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误。

  现在,我就简单介绍一下最新版本的OAUS中关于这个功能的实现。在上一个版本中,我们是这样操作的: 

      

  每次有版本更新时,我们需要把更新的文件拷贝到服务端的FileFolder文件夹下覆盖掉旧的文件,然后通过上述的操作界面,来手动修改每个文件的版本号。这个过程很繁琐,而且容易出错。于是,新版本就增加了自动扫描的功能,一键就可以搞定。

  新版的操作界面截图如下所示:

  

  点击“自动扫描”按钮,服务端就会检索FileFolder文件夹下文件的名称、大小、最后更新时间,然后得出本次更新结果:变化了几个文件、新增了几个文件、删除了几个文件。

二.源码实现

  下面简单说明一下代码实现的具体过程。

1.FileUnit类增加 FileSize 和 LastUpdateTime 属性:这两个属性用于作为比对文件是否发生变化的最根本依据。

2.具体实现代码如下:

    private void button1_Click(object sender, EventArgs e)
    {
        int changedCount = 0;
        int addedCount = 0;
        List<FileUnit> deleted = new List<FileUnit>();
        List<string> files = ESBasic.Helpers.FileHelper.GetOffspringFiles(AppDomain.CurrentDomain.BaseDirectory + "FileFolder\\");
        //第一轮:检测发生变化和新增的文件
        foreach (string fileRelativePath in files)
        {
            FileInfo info = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "FileFolder\\" + fileRelativePath);
            FileUnit unit = this.GetFileUnit(fileRelativePath);
            if (unit == null) //新增的文件
            {
                unit = new FileUnit(fileRelativePath, 1, (int)info.Length, info.LastWriteTime);
                this.fileConfig.FileList.Add(unit);
                ++addedCount;
            }
            else
            {
                //发生变化的文件
                if (unit.FileSize != info.Length || unit.LastUpdateTime.ToString() != info.LastWriteTime.ToString())
                {
                    unit.Version += 1;
                    unit.FileSize = (int)info.Length;
                    unit.LastUpdateTime = info.LastWriteTime;
                    ++changedCount;
                }
            }
        }

        //第二轮:检测被删除的文件
        foreach (FileUnit unit in this.fileConfig.FileList)
        {
            bool found = false;
            foreach (string fileRelativePath in files)
            {
                if (fileRelativePath == unit.FileRelativePath)
                {
                    found = true;
                    break;
                }
            }
            if (!found)
            {
                deleted.Add(unit);
            }
        }

        foreach (FileUnit unit in deleted)
        {
            this.fileConfig.FileList.Remove(unit);
        }
        this.fileConfig.Save();

        if (changedCount > 0 || addedCount > 0 || deleted.Count > 0)
        {
            this.changed = true;
            this.dataGridView1.DataSource = null;
            this.dataGridView1.DataSource = this.fileConfig.FileList;
            string msg = string.Format("更新:{0},新增:{1},删除:{2}", changedCount, addedCount, deleted.Count);
            MessageBox.Show(msg);
        }
        else
        {
            MessageBox.Show("没有检测到变化。");
        }           
    }

(1)首先,第一轮检测发生变化的或新增的文件。

(2)然后,第二轮检测被删除的文件。

(3)每次检测完毕后,都更新维护的版本号。

  最后,我保留了原始的手动更新版本号的功能,以备不时之需。

3. 关于客户端如何使用升级机制的说明

  一般而言,如果最新客户端程序与老版本兼容,不升级也影响不大,则可以交由用户决定是否升级;如果最新客户端程序不兼容老版本,或者是有重大更新,则将启动强制升级。如果流程要进入启动升级,那么只要启动AutoUpdater的文件夹下AutoUpdater.exe就可以了。要注意的是,启动AutoUpdater.exe进程后,要退出当前的客户端进程,否则,有些文件会因为无法被覆盖而导致更新失败。代码大致如下所示: 

  if (VersionHelper.HasNewVersion(oausServerIP,oausServerPort)) 
  {      
       string updateExePath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater\\AutoUpdater.exe";   
       System.Diagnostics.Process myProcess = System.Diagnostics.Process.Start(updateExePath);     
       ......//退出当前进程  
  } 

  客户端运行后,升级过程截图如下:

      

三.相关下载

1.自动升级系统OAUS - 源码

2.自动升级系统OAUS(可直接部署) 

3.自动升级系统OAUS - 使用手册

  如果有任何建议或问题,请留言给我。

 

目录
相关文章
|
11月前
|
缓存 安全 数据库
CleanMyMac X2024全新版本功能介绍
电脑清理软件在我们的电脑使用过程中是非常实用便捷的清理软件.当电脑使用了一段时间内,电脑就会产生各种各样的垃圾文件,比如说残留的注册表或者无效的注册表,系统碎片以及毫无用处的文件等,这些的存在将会极大程度地拖慢电脑的运行速度,而你删除的话可能会删除本不能删除的文件,导致系统损坏无法再继续使用,而它借助于强大的扫描引擎为你智能安全地清理无用垃圾,整理清洁C盘,能还你一个流畅极速的运行环境,这类软件占用体积也不怎么大,你可以预备着,感觉卡顿的时候就拿来清理一下!操作极其简单,各位用户都能轻松享受优质顺畅的电脑使用体验!
93 0
|
芯片 异构计算
会声会影2023增强功能及旧版本区别对比
2023年会声会影带来了六大新功能,其中包含了瞩目的标题与转场的更新,另外也进行了多项功能的增强,包括GIF创作器、开始结束标记的功能增强等。大家是不是已经按耐不住,想赶紧解锁新功能?事不宜迟,现在就让我们一起来看看会声会影2023对比2022的变化,包括功能对比。
505 0
|
Web App开发 存储 缓存
CleanMyMac X4.12全新版本功能介绍
CleanMyMac X2023最新版终于迎来了又4.12,重新设计了 UI 元素,华丽的现代化风格显露无余。如今的CleanMyMac,早已不是单纯的系统清理工具。在逐渐融入系统优化、软件管理、文件管理等功能后,逐渐趋近于macOS的系统管家,却又没有Windows上XX 卫士的臃肿。macOS 平台的知名系统清理应用 CleanMyMac 在经历了一段时间的beta测试后,全新设计的 CleanMyMac X 正式上线。与 CleanMyMac 3 相比,新版本的 UI 设计焕然一新,采用了完全不同的风格。
145 0
|
Web App开发 缓存 安全
CleanMyMac X4.12.4最新版本更新了哪些功能?
CleanMyMac X是一款先进的、集所有功能于一身的实用系统清理工具,它能帮助保持您的Mac保持清洁。只需两个简单的点击,就可以删除无用的文件,以节省您宝贵的磁盘空间。CleanMyMac X可以流畅地与系统性能相结合,清洁不需要的语言、记录更新、清洁缓存、快速安全擦除、应用卸载和清空回收站等重要功能。CleanMyMac X可以为您节省硬盘空间,提高电脑的速度。CleanMyMac X一定会使您的Mac更加出色。
164 0
|
存储 缓存 监控
CleanMyMac2023新版本功能介绍
CleanMyMac X是一款专业的Mac清li软jian,可智能清limac磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。
98 0
|
Web App开发 缓存 算法
CleanMyMac X4.11.3版本有哪些新的功能?
很多时候用着用着磁盘就不够用了,如果你的 Mac 硬盘是 512GB 的倒还好,256GB 的你就得多注意一下了,另外 1T 定制版请绕道,这款CleanMyMac不适合你。Mac系统中的“360”,一款拥有智能功能算法的系统清洁软件。简约时尚的界面大气雅致,与Mac系统的风格相呼应。
137 0
|
监控 安全 UED
CleanMyMac X4.11新版本上线及功能介绍
本次新功能上线后,CleanMyMac X 除了管理内存以及应用程序等基础功能之外,新增了可以实时监控 Mac 所有关键区域状态的功能。
123 0
CleanMyMac X4.11新版本上线及功能介绍
如何处理开发环境没有问题,线上环境有问题这个bug
如何处理开发环境没有问题,线上环境有问题这个bug
|
运维 Kubernetes Cloud Native
Rainbond 5.6 版本发布,增加多种安装方式,优化拓扑图操作体验
Rainbond 5.6 版本,主要致力于提升拓扑图操作效率以及快速安装体验,降低用户使用门槛。
Rainbond 5.6 版本发布,增加多种安装方式,优化拓扑图操作体验
选择1对1视频软件源码,关键不仅是系统实现
对于1对1视频软件源码来说,性能是非常重要的一项指标,在系统后期运营中必定会出现用户高并发的情况,如果系统性能不好,很可能会因为高并发引发一些问题,影响用户体验。用户体验是影响用户留存的关键,如果出现性能问题,必定影响用户留存。