【开源】检查更新程序 CheckUpdate.Net 的实现
访问最新源代码及更新历史:http://git.oschina.net/xcong/CheckUpdate.Net
DownLoad
更新历史
version 1.2
- [新增]添加UpdateFileClient.exe.config文件,修改UpdateFileClient.exe依赖的.Net Framwork 2.0版本与主程序兼容问题
- [修改]修改更新程序,下载文件不存在时提示文件出错。
version 1.1
- 【修改】修改窗体文件丢失
- 【新增】新增服务端配置项添加安装包位置和版本
- 【新增】新增UpdateCommon中VersionHelper下载安装包方法GetNewVersionToDownloadSetup。如果需要下载,弹窗提醒,并调用浏览器下载,同时返回True。
介绍
CheckUpdate.Net是.Net C/S下一个检查更新程序。现有的检查更新方式多种多样,更新程序也大不相同。有个比较出名的OSAU(参考了他的界面),但是有10个链接限制。微软也有比较方便的ClickOnce。自己也尝试了其他的,发现没有合适的就决定自己写一个。
考虑到复用,在.Net Framework2.0下开发。主要就是利用WebClient下载服务器网站目录下的文件,安全性暂没有考虑,比较适用于小型项目。
UpdateFileClient.exe/UpdateFile.xml/UpdateFileCommon.dll/UpdateFileClient.exe.config[可选] 为客户端需要用到的文件
UpdateFileServer.exe/UpdateServer.xml/UpdateFileCommon.dll 为服务端需要用到的文件
注意事项:
1.UpdateFileClient.exe依赖于.Net Framwork 2.0,如果主程序的.Net Framwork版本高于2.0,需要添加UpdateFileClient.exe.config文件(默认是兼容4.0)。
如果主程序的.Net Framwork版本为2.0,请删除UpdateFileClient.exe.config文件。
.Net Framwork 4.0是新的CLR,无法兼容旧版CLR。该方案主要兼容在Windows Xp下单独安装了.Net Framework 4.0 版本。
Windows Vista/Win7 已经分别安装.Net Framework 2.0与3.5,具有CLR 2.0特性,需要删除App.config。
主要功能
- 支持单个或多个文件更新
读取服务端XML配置文件,获取需要修改或新增的文件,然后进行下载,下载完成之后,更新本地版本。 - 支持更新更新程序本身
通过配置本地的XML文件,放置更新程序的目录。主程序启动时,进行检查,处理。 - 服务端支持程序更改配置文件,无需手动更改XML
使用方式
配置服务端,需要能够通过正常访问XML和文件。一般采用新建一个web站点,发布到IIS的方式。
将UpdateFileServer.exe/UpdateServer.xml/UpdateFileCommon.dll 拷贝到服务端,通过UpdateFileServer.exe配置XML。


将主程序运行需要的文件通过XML配置起来
将Update.xml、UpdateFileClient.exe、UpdateFileCommon.dll添加到启动程序相同目录,主程序需要引用UpdateFileCommon.dll。
将启动程序需要更新的文件通过XML进行配置,放在File节点下,初始版本为1。
配置服务端XML所在路径,当前版本、版本对应的值、临时文件夹、更新程序名称可以采用默认值。
实现更新程序的更新
需要在主程序中添加一行代码,进行检查临时文件夹是否包含更新程序,如果有,进行剪切操作。
using UpdateFileCommon;
//发现新的更新程序,进行剪切到根目录
VersionHelper.CutNewUpdateEXE();
按需添加检查更新代码
可以在程序启动时或者点击按钮进行检查更新操作。
检查更新是弹窗进行提醒,需要传两个参数,一个更新描述,一个是否强制更新。对应XML节点是服务端XML的ReleaseNote和IsMustUpdate。
NextShowEvent 事件是点击按钮下次提醒需要执行的操作。Winform
//默认的LoginView为登陆窗体
ApplicationContext context = new ApplicationContext(new LoginView());
//发现设定的目录存在新的更新程序,进行剪切到根目录
VersionHelper.CutNewUpdateEXE();
//检查是否需要下载安装包,不需要下载返回False
if (!VersionHelper.GetNewVersionToDownloadSetup())
{
//检查版本更新
if (VersionHelper.IsRequiredUpdate())
{
string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
if (File.Exists(xmlPath))
{
//加载XML路径
XmlDocument doc = new XmlDocument();
doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));
//获取值
var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);
PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
//赋值委托,点击下次提醒的按钮执行的操作
form.NextShowEvent += delegate
{
//执行xxx
};
context = new ApplicationContext(form);
}
}
}
//do something
Application.Run(context);
WPF
WPF中需要特殊处理,在WPF项目中添加Program.cs文件,添加Main方法,项目右键属性,设置Program为启动对象。
[STAThread]
static void Main()
{
//发现设定的目录存在新的更新程序,进行剪切到根目录
VersionHelper.CutNewUpdateEXE();
//检查是否需要下载安装包,不需要下载返回False
if (!VersionHelper.GetNewVersionToDownloadSetup())
{
//检查版本更新
if (VersionHelper.IsRequiredUpdate())
{
string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
if (File.Exists(xmlPath))
{
//加载XML路径
XmlDocument doc = new XmlDocument();
doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));
//获取值
var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);
PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
//赋值委托,点击下次提醒的按钮执行的操作
form.NextShowEvent += delegate
{
//执行xxx
};
//这里启动PromptingForm窗体
form.ShowDialog();
}
}
}
//不需要更新时,默认启动登陆窗体
else
{
LoginView view = new LoginView();
view.ShowDialog();
}
}
联系我们
CheckUpdate.Net交流群 137867517 [点击加群]
【开源】检查更新程序 CheckUpdate.Net 的实现的更多相关文章
- 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!
JeeWx-App-CMS开源小程序CMS网站,持续更新ing~ JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的 ...
- [开源]JSON文本格式化工具(简码万能助手开源扩展程序)
现在的网站大多都是使用json进行API式前后端数据交互, 有时抓包得到的是一串没格式化的JSON文本, 不太方便分析, 所以我自行写了个开源扩展程序, 可以方便地格式化JSON文本. 当然,你也 ...
- wordpress开源小程序
wordpress多端开源小程序正式发布了,目前支持微信/QQ/百度/今日头条. 目前我们的开源小程序,已经建立了微信QQ交流群,需要的可以加下,微信添加hackdex(备注开源拉你入群),QQ群:7 ...
- 推荐一个非常COOL的开源相册程序!
不知道大家有没想过有一个完全属于自己的网络相册?现在网上的相册程序已可以说多不胜数,那么到底要使用哪个会比较好呢? 之前我也在为此事烦恼过,在网上找了很多个程序试了,但都没达到我的要求,后来发终于功夫 ...
- TP5框架,开源小程序商城源码,前端+后台完整版
CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...
- 开源小程序CMS网站, JeeWx-App-CMS 1.0 首版本发布
JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的小程序公司官网.项目结构简单,逻辑清晰,代码规范,非常适合作为小程 ...
- 各开源 bbs 程序比较
主要是集中在 php 开源轻巧的程序. 搜索到一个逼乎的一个帖子:https://www.zhihu.com/question/20655704 ,顺藤摸瓜 下. carbon forum 第一个测试 ...
- 【Web技术】281- 滴滴开源小程序框架 Mpx2.0
滴滴Mpx框架负责人@hiyuki,滴滴出行网约车webapp乘客团队的负责人,也是滴滴开源的小程序框架Mpx的负责人和核心作者 Mpx是一款致力于提高小程序开发体验和效率的增强型小程序框架,目前在滴 ...
- Xdebug开源PHP程序调试器
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. 本文为大家讲解的是在linux下xdebug的安装和配置方法,感兴趣的同学参考下 ...
随机推荐
- C语言之选择结构
该章内容:本章我们学习三大结构之一:选择结构,采用选择结构来解决问题称为判断问题,它的求解规则是在不同的条件下进行不同的操作.选择结构比顺序结构要复杂一些.本章是考试的重点章节. 学习方法:先了解选择 ...
- solr学习笔记-linux下配置solr(转)
本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...
- C++预处理和头文件保护符
一预处理 1.常见的预处理功能 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译.布局控制和宏替换4种.文件包含:#include 是一种最为常 ...
- 【Node.js】Mac 下安装node图文详解
1 进入官网,下载node最新版 官网:https://nodejs.org/en/ 2 双击下载的安装包,一路默认安装就行 3 打开终端,输入以下命令查看结果,如出现下图信息则为安装成功 4 ...
- LNMP redis 安装、PHPredis扩展配置、服务器自启动、redis认证密码
背景: LNMP 环境(centos7) 一. 安装redis 1.下载,解压,编译 $ cd /usr/local$ wget http://download.redis.io/releases/r ...
- ReactNative For Android 框架启动核心路径剖析
版权声明:本文由王少鸣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/144 来源:腾云阁 https://www.qclo ...
- 【MySQL】为什么不要问我DB极限QPS/TPS
为什么不要问我DB极限QPS/TPS 背景 相信很多开发都会有这个疑问,DB到底可以支撑多大的业务量,如何去评估?对于这个很专业的问题,DBA也没有办法直接告诉你,更多的都是靠经验提供一个看似靠谱的结 ...
- 【数组】—冒泡排序&&选择排序---【巷子】
/* 什么是冒泡排序:从头到尾比较相邻的两个数的大小,如果符合条件则进行比较 [注]:从小到大进行排序 假设有一个数组 var arr = [9,8,7,6,5,4]; 我们想要进行这个数组进行排序那 ...
- mariadb安装配置
CentOS 7安装MariaDB 详解以及相关配置 第一步:添加 MariaDB yum 仓库 首先在CentOS操作系统中/etc/yum.repos.d/目录下添加 MariaDB 的YUM配置 ...
- 170626、springboot编程之静态资源文件
Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. 建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通 ...