Winform开发框架之通用自动更新模块

简介:

在网络化的环境中,特别是基于互联网发布的Winform程序,程序的自动更新功能是比较重要的操作,这样可以避免挨个给使用者打电话、发信息通知或者发送软件等,要求其对应用程序进行升级。实现程序的自动更新,在后期发布维护过程中,一个可以快速相应修正相关的Bug或者增加功能,二个可以避免给使用客户隔三差五的发送修改好的程序,省心省力。本文也是基于这个思想,在Winform开发框架中再引入一个自动升级更新的通用模块,这个自动升级的通用模块除了具备一般的功能外,可以通过配置程序标题、升级路径方式等方式,实现通用化的升级操作,其他需要升级的程序,拿过来就可以使用,经过项目的整合及优化,已经具备较好的应用前景了。

本通用自动更新模块具有下面几个特点:

1)程序标题可配置,更新路径可配置,适用于各种需要更新的项目整合。

2)支持文件复制或者对压缩包进行解压,适合更多琐碎程序集的整体升级。

3)支持文件更新后自动启动,或者带参数的启动方式。

下面是我的Winform开发框架中集成通用自动更新模块的截图,如下所示。 

 

更新过程中会先关闭主程序,把更新的Zip文件下载后进行自动解压,然后启动主程序。 


自动更新一般需要设置一些参数,如程序标题、更新地址路径、版本号等,本通用自动更新的XML文件如下所示。
 

自动更新虽然可以独立进行执行并更新,不过一般会在主程序中加入对自动更新的判断(毕竟使用客户大多数都是会运行主程序的),实现自动更新判断及执行,我们可以把其放到一个后台线程中执行判断,这样可以提供用户的体验,不会中断界面操作,我一般倾向于把自动更新放到登录界面的首页上,这样用户每次登录的时候,可选择性进行更新,登录后一般要进行业务操作,如果更新退出可能会导致客户的一些重要数据没有保存而丢失,这样影响不好。

         ///   <summary>
        
///  窗体加载实现的操作
        
///   </summary>
         private  void Logon_Load( object sender, EventArgs e)
        {
            .......................

             #region 更新提示/判断是否自动更新
            updateWorker =  new BackgroundWorker();
            updateWorker.DoWork +=  new DoWorkEventHandler(updateWorker_DoWork);
            updateWorker.RunWorkerCompleted +=  new RunWorkerCompletedEventHandler(updateWorker_RunWorkerCompleted);

             string strUpdate = config.AppConfigGet( " AutoUpdate ");
             if (! string.IsNullOrEmpty(strUpdate))
            {
                 bool autoUpdate =  false;
                 bool.TryParse(strUpdate,  out autoUpdate);
                 if (autoUpdate)
                {
                    updateWorker.RunWorkerAsync();
                }
            }
             #endregion
        }

         #region 更新提示线程处理
         private  void updateWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e)
        {
             // MessageUtil.ShowTips("版本更新完成");
        }

         private  void updateWorker_DoWork( object sender, DoWorkEventArgs e)
        {
             try
            {
                UpdateClass update =  new UpdateClass();
                 bool newVersion = update.HasNewVersion;
                 if (newVersion)
                {
                     if (MessageUtil.ShowYesNoAndTips( " 有新的版本,是否需要更新 ") == DialogResult.Yes)
                    {
                        Process.Start(Path.Combine(Application.StartupPath,  " Updater.exe "),  " 121 ");
                        Application.Exit();
                    }
                }
                
            }
             catch (Exception ex)
            {
                MessageUtil.ShowError(ex.Message);
            }
        }
        #endregion

上面是介绍我Winform开发框架中应用的自动更新模块,当然经验丰富的你可能也有自己的更新模块,或者比这个更具有一些亮点的地方,这样的话非常开心大家一起交流研究。

本人多年来一直致力于开发一些共享软件,如送水管理系统、酒店管理系统、仓库管理系统、配电网络可视化管理系统、病人资料管理系统,以及一些小型的软件,如QQ搜通天、易博搜搜、赶集小神童、绿苗帮电脑监控系统等,以及在日常中,也是从事一些较为大型系统的开发工作。一直以来,有一个想法,就是尽可能利用好的、经过淬炼的技术,以及日常积累的经验所得,构建一个Winform开发框架的生态体系,目前这些体系基本上已经完整实现,并应用在实际项目和共享软件当中,并在实际中历练和升华。
这个体系包括有:
  1)Database2Sharp代码生成工具,用来辅助生成复杂的架构基础代码,以及日常的一些琐碎反复的工作。
  2)一个稳定成熟、反复应用过的Winform开发框架,集成应用程序必备的一些常用操作,新的业务系统只需要在其上面按既定的模式叠加业务操作即可,提供框架的可用性、稳定性以及完善性。
  3)提供一个所有业务系统都很常见的权限管理系统以及一个也很常见的字典数据管理模块。这两个模块是组件化的模块,既相互独立,又可以和Winform框架进行集成,供业务系统重复调用。
  4)一个集成多年经验积累、反复优化提炼的公用类库,类库封装日常开发所应用到的方方面面,如一把瑞士军刀,一个个奇兵,各有用处。
  5)一系列界面控件的整合效果,提供各种报表生成的解决方案(普通二维报表、自定义模板报表、复杂报表等高级功能。
  6)提供一个封装日常数据显示的分页控件,集成高性能的数据分页显示、数据打印、数据导出、常用数据操作等接口功能。
  7)提供一个通用的程序自动更新模块,更快、更便捷实现程序的自动更新,避免挨个给使用者打电话、发信息通知或者发送软件等,要求其对应用程序进行升级。

  8)基于上面第2点的Winform开发框架及整合所有通用模块,开发基于互联网软件发布模式的WCF开发框架,构建一个安全、高效、便捷、分布式的业务管理系统。 

如果你对我的Winform开发框架有兴趣,还可以阅读下面几篇文章,如下:

  Winform开发框架之字典数据管理

 Winform开发框架之权限管理系统 

 Winform开发框架之终极应用 

  Winform开发框架之Office Ribbon界面

 基于我的Winform开发框架扩展而成的WCF开发框架

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之通用自动更新模块,如需转载请自行联系原博主。



目录
相关文章
|
前端开发 JavaScript API
构建可重用用户界面:深入了解组件库的价值与实践
在现代应用程序开发中,组件库已经成为加速开发和提高代码质量的利器。它们是可重用的UI构建块,可以帮助开发者创建一致、漂亮和功能强大的用户界面。本博客将深入研究组件库的核心概念、最佳实践以及为什么它们对于现代开发至关重要。
96 0
|
1月前
|
关系型数据库 API PostgreSQL
如何创建免费版本的ABP分离模块?
如何创建免费版本的ABP分离模块?
|
3月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
64 2
|
前端开发
封装库/工具库中重要概念之组件库
前端开发中,封装库和工具库是非常重要的组成部分。它们可以帮助我们提高代码复用性和可维护性,从而缩短开发周期和降低维护成本。在封装库和工具库中,组件库是其中最为重要和常用的一种,因为它们可以帮助我们快速构建复杂的 UI 界面。
256 0
|
前端开发 JavaScript 开发者
封装库/工具库中重要概念之UI框架
UI(User Interface)框架是前端开发中十分重要的一部分,它提供了各种组件和样式,用于构建页面和用户界面。在前端开发中,封装库/工具库可以帮助我们更加高效地使用 UI 框架。
195 0
|
JavaScript 前端开发 API
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
161 0
|
机器学习/深度学习 数据采集 SQL
如何自定义开发算法组件
使用【阿里云-机器学习PAI-pai studio】,用python开发自定义算法组件,并且上传内网,发布部署到PAI平台
509 0
|
Web App开发 前端开发 .NET
【ABP框架系列学习】模块系统(4)
原文:【ABP框架系列学习】模块系统(4) 0.引言 ABP提供了构建模块和通过组合模块以创建应用程序的基础设施。一个模块可以依赖于另外一个模块。通常,程序集可以认为是模块。如果创建多个程序集的应用程序,建议为每个程序集创建模块定义。
1602 0
|
存储 C#
WinForm基于插件开发实现多项配置存储
一、课程介绍和实例在线演示 明人不说暗话,跟着阿笨一起玩WinForm。本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程! 本次分享课程给大家带来一个W...
1848 0
|
缓存 NoSQL 数据库
3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S、B/S的服务端框架,可用于项目开发和学习。目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型、多库实例,简单强大; 此部分具体说明可参考博客: https://www.
1298 0