CAutoupdater通用自动升级组件

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/8513847  CAutoupdater通用自动升级组件 1、CAutoupdater通用自动升级组件介绍1.
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/8513847

 CAutoupdater通用自动升级组件

 

1CAutoupdater通用自动升级组件介绍

1.1、组件介绍

C/S构的特点是能充分发挥客户端的处理能力,很多工作可以由客户端处理后再提交给服务器,对应的优点就是客户端响应速度快模式客户端以其强大的功能,丰富的表现力受到相当大部分用户的青睐,但是客户端布署,维护升级的成本却是非常的高的。 

 C/S客户端需要安装专用的客户端软件及运行环境。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。

CAutoupdater组件就是为了解决C/S在维护升级方面的问题而存在的,本组件可以快速建立升级部署应用,完全控制整个升级部署过程,全功能的、快速、易于使用,设立发布你的客户端应用。

本组件以最简单的模式提供给客户端在线布署和自动升级功能,彻底解决升级部署方面的后顾之忧。组件中提供的的接口以最简单的方式来对升级过程提供完全控制。CAutoupdater组件为你的软件集成稳定/高效的自动升级功能,是本升级组件的宗旨。

CAutoupdater组件四步完成升级工作:检查新版本、下载到临时目录、检查本地文件、拷贝到工作目录。

无需特被的服务器,传统的Web服务即可,如IIS等。服务器部署最新版的软件文件(文件列表保存在一个XML文件中),CAutoupdater组件对比分析服务器和客户端的XML对比配置文件,不同就更新。

CAutoupdater组件采用C#语言编写,可应用于目前大多流行语言开发的软件之中,不依赖任何类库,稳定,高效。

2.2CAutoupdater组件升级原理及过程。

2.2.1CAutoupdater组件工作原理。

 

2.1.1.1 不必关心当前使用的版本

 

 

2.1.1.2对比分析服务端与客户端使用的软件版本

2.2.2、服务端部署。

要使用CAutoupdater组件必须部署服务端,服务端的部署很简单,在这儿我们选择传统的IIS进行部署。假设我们升级的相关文件放在服务端的DCAutoupdater文件夹下,打开IIS,新建一个网站,将其物理路径指向:D:\CAutoupdater,具体IIS的配置可参考相关文章,在这儿不再介绍。在这儿重点介绍服务端AutoupdateService.xml文件。

 

2.2.1 AutoupdateService.xml文件

通过AutoupdateService.xml文件可以看到,目前我们新增了一个待更新的文件RDIFramework.NET.exe,其版本号通过lastver配置项提供,文件大小通过size配置项提供,还有一个配置项needRestart,是否需要重启应用程序,意思是说,更新本文件后,主程序是否需要重新启动。url配置项就是待更新文件实际的服务端地址,客户端通过这个地址来下载这个文件。

客户端是如何判断当前是否需要更新呢?这儿主要是通过lastver(最新的版本号)与size(文件大小)来判断,两者只要取其一即可,在CAutoupdater组件中是两者同时取,只要客户端对应文件与服务端对应文件的最新版本号或文件大小不一样,则更新。下面我们来看一下如何自动生成服务端的配置文件(AutoupdateService.xml),如下图所示:

2.2.2.1 CAutoupdater服务端配置

在图2.2.2.1中,配置文件的名称默认不允许修改,服务端地址就是我们配置IIS时的URL地址,在我的这个实例中是:http://localhost:8010/,服务端目录就是IIS对应URL地址所在的物理地址,在我的实例中是:D:\CAutoupdater,在界面下方的文件列表中,我们可以添加需要更新的文件,对于选择错误的文件,也可以对其选中后移除,可以看到文件列表的第一列为“重启?”,如果选中,则表示客户端升级后,需要重启客户端主程序,以完成更新,这需要根据实际的项目要求做相应的设置,没有定论。单击“生成”按钮,即可自动生成服务端的配置文件AutoupdateService.xml,同时把文件列表中的文件拷贝到指定的“服务端目录”中去。这样,就完成了服务端的配置。

 同时需要说明的时,同时要修改CAutoUpdater项目文件中的“Autoupdater.config”文件,此文件实例设置如下:

<?xml version="1.0" encoding="utf-8"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Enabled>true</Enabled>
 <ServerUrl>http://localhost:8010/AutoupdateService.xml</ServerUrl>
</Config>

其中的:http://localhost:8010/AutoupdateService.xml 就是升级服务器上升级配置文件的URL地址。在客户端中也要包含这个文件,以让客户可以通过这个文件中配置的升级服务器的地址,找到待升级的文件。

2.3、客户端部署。

客户端的配置非常简单,只需引用“AutoUpdater.dll”文件,然后在需要的位置(一般是在程序启动时检查更新,也可让用户手动检查更新),我一般都是在程序启动时(在Program.cs文件的Main函数中)检查待更新的文件,参考代码为:

          #region check and download new version program
            bool bHasError = false;
            IAutoUpdater autoUpdater = new AutoUpdater();
            try
            {
                 autoUpdater.Update();
            }
            catch (WebException ex)
            {
                LogHelper.WriteException(ex);
                MessageBoxHelper.ShowErrorMsg("连接自动升级服务器出错,请检查网络连接或联系软件提供商。");
                bHasError = true;
            }
            catch (XmlException ex)
            {
                LogHelper.WriteException(ex);
                bHasError = true;
                MessageBoxHelper.ShowErrorMsg("AutoUpdate Error:Download the upgrade file error");
            }
            catch (NotSupportedException ex)
            {
                LogHelper.WriteException(ex);
                bHasError = true;
                MessageBoxHelper.ShowErrorMsg("AutoUpdate Error:Upgrade address configuration error");
            }
            catch (ArgumentException ex)
            {
                LogHelper.WriteException(ex);
                bHasError = true;
                MessageBoxHelper.ShowErrorMsg("AutoUpdate Error:Download the upgrade file error");
            }
            catch (Exception ex)
            {
                LogHelper.WriteException(ex);
                bHasError = true;
                MessageBoxHelper.ShowErrorMsg("AutoUpdate Error:An error occurred during the upgrade process");
            }
            finally
            {
                if (bHasError == true)
                {
                    try
                    {
                        autoUpdater.RollBack();
                    }
                    catch (Exception ex)
                    {
                        LogHelper.WriteException(ex);                     
                    }
                }
            }
            #endregion

客户端启动时,检查若有升级,就会弹出下面的窗口。

  

作者: EricHu
出处: http://blog.csdn.net/chinahuyong
微博: 腾讯
Email: umplatform@126.com或 406590790@qq.com
QQ 交流:406590790 
平台博客: 【CSDN】http://blog.csdn.net/chinahuyong
         【CNBLOGS】http://www.cnblogs.com/huyong
关于作者:高级工程师、信息系统项目管理师、DBA。专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,曾多次组织并开发多个大型项目,精通DotNet,DB(SqlServer、Oracle等)技术。熟悉Java、Delhpi及Linux操作系统,有扎实的网络知识。在面向对象、面向服务以及数据库领域有一定的造诣。现从事DB管理与开发、WinForm、WCF、WebService、网页数据抓取以及ASP.NET等项目管理、开发、架构等工作。
如有问题或建议,请多多赐教!
本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。

相关文章
|
数据采集 安全 数据中心
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
爬虫应该选择住宅ip代理还是数据中心代理?
|
4月前
|
JSON 前端开发 关系型数据库
如何物业管理(园区式)系统的房屋及设备设施板块?(附架构图+流程图+代码参考)
本文介绍了园区物业管理系统中房屋与设备设施管理的核心内容,涵盖设备信息、巡检、报修、保养四大功能模块,提供系统架构图、数据模型设计、关键实现建议及可落地的代码样例。通过打通资产与运维流程,实现降本增效、减少停机与投诉,助力运维数据化、智能化。
|
人工智能
新手必看,写歌词的技巧和方法新分享,妙笔生词AI智能写歌词软件
对于新手,写歌词不再难。本文分享了写歌词的实用技巧,如积累生活素材、明确主题、合理安排主副歌、简洁有力的语言表达等。推荐使用“妙笔生词智能写歌词软件”,其AI功能可助你灵感不断,轻松创作。
|
9月前
|
运维 Oracle 关系型数据库
YashanDB演讲实录|王南:YAC集群,核心平替
本文分享了“2024国产数据库创新生态大会”上,深算院首席产品官兼崖山科技副总裁王南的演讲实录,主题为《YAC集群,核心平替》。文章深入探讨了数据库行业面临的规模化应用挑战,提出崖山数据库在核心技术、团队实力和商业化能力上的优势。崖山通过YashanDB V23版本,正式发布共享集群LTS版本、Oracle 99%兼容、MySQL生态支持、私有云管平台及数据库一体机等创新成果,提供高性价比的平替方案。同时,崖山全面开放V23版本下载,携手200多家生态伙伴加速商业落地,助力国产数据库迈向大规模应用新时代。
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
833 0
|
Windows
Windows操作系统中环境变量的检索顺序
Windows操作系统中环境变量的检索顺序
394 3
|
XML 数据可视化 C语言
001 Qt_从零开始创建项目
本文是Qt专栏的第一篇,介绍了如何创建一个Qt项目。
440 4
ly~
|
SQL 开发框架 Java
FileRun 支持哪些文件格式?
FileRun 支持多种文件格式,涵盖图像、办公文档、CSV、PDF、文本、电子书、存档、视频及音频文件等。提供预览、编辑、创建等功能,兼容性广泛,支持第三方服务集成,满足多样化需求。
ly~
280 1
|
机器学习/深度学习 人工智能 搜索推荐
AI与未来医疗:重塑健康的双刃剑
【10月更文挑战第6天】 人工智能作为现代科技的巅峰之作,已经渗透进我们生活的方方面面。从语音助手到自动驾驶,AI不仅改变了我们的日常,更在各个专业领域,特别是医疗行业,扮演着愈发重要的角色。本文探讨了AI在未来医疗中的应用及其潜在影响,揭示了这把“双刃剑”的机遇与挑战。
432 1
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
227 0