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开发框架中的界面层的继承关系,首先我把所有窗体区分为三类,一类是普通的窗体,一类编辑窗体,还有一类是列表显示窗体.窗体的集成可以封装处理很多东西,良好的封装和继承 ...
随机推荐
- PHP运行模式的深入理解
PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli 命令行运行 ( ...
- [转] jQuery Infinite Ajax Scroll(ias) 分页插件介绍
原文链接:http://justflyhigh.com/index.php/articlec/index/index.php?s=content&m=aticle&id=91 Infi ...
- Java [Leetcode 202]Happy Number
题目描述: Write an algorithm to determine if a number is "happy". A happy number is a number d ...
- erl0001-Erlang 设计原则 process port io
Erlang原理 (转载自ITEYE cryolite博客 ps:精彩)by Robert Virding This is a description of some of the basic pro ...
- Vijos 1132 求二叉树的先序序列
描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 格式 输入格式 第一行为二叉树的中序序列 第二行为二叉树的后序序列 输出格式 一行,为二叉树的先 ...
- 典型的 SQL 注入过程(转)
无意间发现某站点存在 SQL 注入漏洞,于是利用这个漏洞提权并获取服务器控制权.这个案例很典型,像是教科书式的典型入侵步骤,下面就以这个案例展示从 SQL 注入到获取目标服务器控制权限的全过程. 发现 ...
- ASP.NET中常用的字符串分割函数
asp.net字符串分割函数用法 先来看个简单的实例 但是其数组长度却是25,而不是3.下面这种方法是先将“[111cn.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面我 ...
- 【原】Storm序列化
5. Storm高级篇 序列化 Dynamic typing Custom serialization Java serialization Component-specific serializat ...
- Python 笔记 : 类和继承
# -*- coding= utf-8 -*- # 文件编码定义的语法规则是: coding[:=]/s*([-/w.]+) # 未指定编码将默认为 : ASCII # 同时要注意物理文件的编码也要 ...
- [LeetCode] Ugly Number (A New Question Added Today)
Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...