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开发框架之通用附件管理模块 --SNF快速开发平台3.3-Spring.Net.Framework
最近项目太多都没有时间写文章了,实际项目需求一,CS端和windows平板都需要附件上传管理功能.以前做的都是BS的附件管理和上传功能.本来计划在Winform上嵌套一个浏览器直接用bs的附件上传功能 ...
- Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...
- Windows程序通用自动更新模块(C#,.NET4.5以上)
本通用自动更新模块适合所有Windows桌面程序的自动更新,不论语言,无论Winform还是wpf. 一.工作流程:1. 主程序A调起升级程序B2. B从服务器获取更新程序列表,打印更新信息.3. B ...
- Winform开发框架之通用高级查询模块
最近一直忙于公司的事情,虽然一直在做一些相关的技术研究,但是很久没能静下心来好好写写博客文章了,想想也有半个月之多了,这半个月来,也一直致力于改善我的WInform开发框架,使得自己及客户使用起来更加 ...
- Winform开发框架之通用Windows摄像头调用拍照--SNF快速开发平台3.3-Spring.Net.Framework
今天做了一个windows系统下调用摄像头.进行开启.关闭.拍照.设置等等功能演示. 进行源码贡献,欢迎大家下载使用 一.DEMO效果如下: 二.DEMO演示代码如下: using SNF.Utili ...
- WinForm通用自动更新器AutoUpdater项目实战
一.项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能.因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级组件, ...
- winform 通用自动更新程序
通用自动更新程序 主要功能: 1. 可用于 C/S 程序的更新,集成到宿主主程序非常简单和配置非常简单,或不集成到主程序独立运行. 2. 支持 HTTP.FTP.WebService等多种更新下载方式 ...
- Winform开发框架之通用数据导入导出操作的事务性操作完善
1.通用数据导入导出操作模块回顾 在我的Winfrom开发框架里面,有一个通用的导入模块,它在默默处理这把规范的Excel数据导入到不同的对象表里面,一直用它来快速完成数据导入的工作.很早在随笔< ...
- asp.net中Winform开发框架之数据即时更新的实现
在开篇之前,首先介绍一下Winform开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承 ...
随机推荐
- [转]Jquery Ajax用法
原文地址:http://www.php100.com/html/program/jquery/2013/0905/6004.html jQuery学习之jQuery Ajax用法详解 来源: 时间 ...
- Brew 编译mod错误Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI
Error: L6265E: Non-RWPI Section libspace.o(.bss) cannot be assigned to PI Exec region ER_ZI.: Error: ...
- Nginx & AWStats 安装、配置、使用
—— 参考IBM文章:THIS , 不一样的指导顺序 —— 1. awstats分析nginx - access.log,网上资料大部分都是下载,然后配置.官网下载地址: http://awstats ...
- poj 3211 Washing Clothes
// 题意 :夫妻两洗衣服,衣服有m种颜色,每种颜色又有若干件,每件衣服洗完需要特定的时间,要求每种颜色放在一起洗,洗完才能洗其他衣服.最后问洗完需要的最少时间// 将衣服按颜色分类 然后求出每种颜色 ...
- CodeSmith模板生成
转:http://blog.csdn.net/jason_ldh/article/details/9887073 一. 工具设置 CodeSmith默认是不支持中文的,那么我们必 ...
- mybatis+spring+struts2框架整合
近期公司要开发新的项目,要用struts2+mybatis+spring框架,所以学习了下,来自己的博客发表下,希望能给大家带来帮助!下边我把我的myschool开发的源代码以及数据库贴出来! 开 ...
- UTF-8编码规则
UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所 ...
- 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法
使用HttpURLConnection下载文件时经常会出现 java.io.FileNotFoundException文件找不到异常,下面介绍下解决办法 首先设置tomcat对get数据的编码:con ...
- [视频监控]用状态机图展示Layout切换关系
监控系统通常会提供多种Layout给用户,用于满足不同需求,如:高清显示单路视频或者同时观察多路监控情况. 文中系统只提供了单路.2x2(2行2列共4路).8路(4行4列布局,从左上角算起,有个核心显 ...
- bjfu1208 中位数
题目是给你一个数x以及一个长度为n的数列,让你往数列里插入y个数,使数列的中位数正好是x,求y的最小值.(其实这题的中位数跟数学里的中位数有一点区别,略去不提) 那么就排完序以后分情况讨论一下就好了. ...