访问最新源代码及更新历史: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 的实现的更多相关文章

  1. 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!

    JeeWx-App-CMS开源小程序CMS网站,持续更新ing~ JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的 ...

  2. [开源]JSON文本格式化工具(简码万能助手开源扩展程序)

    现在的网站大多都是使用json进行API式前后端数据交互, 有时抓包得到的是一串没格式化的JSON文本, 不太方便分析, 所以我自行写了个开源扩展程序, 可以方便地格式化JSON文本.   当然,你也 ...

  3. wordpress开源小程序

    wordpress多端开源小程序正式发布了,目前支持微信/QQ/百度/今日头条. 目前我们的开源小程序,已经建立了微信QQ交流群,需要的可以加下,微信添加hackdex(备注开源拉你入群),QQ群:7 ...

  4. 推荐一个非常COOL的开源相册程序!

    不知道大家有没想过有一个完全属于自己的网络相册?现在网上的相册程序已可以说多不胜数,那么到底要使用哪个会比较好呢? 之前我也在为此事烦恼过,在网上找了很多个程序试了,但都没达到我的要求,后来发终于功夫 ...

  5. TP5框架,开源小程序商城源码,前端+后台完整版

    CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...

  6. 开源小程序CMS网站, JeeWx-App-CMS 1.0 首版本发布

    JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的小程序公司官网.项目结构简单,逻辑清晰,代码规范,非常适合作为小程 ...

  7. 各开源 bbs 程序比较

    主要是集中在 php 开源轻巧的程序. 搜索到一个逼乎的一个帖子:https://www.zhihu.com/question/20655704 ,顺藤摸瓜 下. carbon forum 第一个测试 ...

  8. 【Web技术】281- 滴滴开源小程序框架 Mpx2.0

    滴滴Mpx框架负责人@hiyuki,滴滴出行网约车webapp乘客团队的负责人,也是滴滴开源的小程序框架Mpx的负责人和核心作者 Mpx是一款致力于提高小程序开发体验和效率的增强型小程序框架,目前在滴 ...

  9. Xdebug开源PHP程序调试器

    Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. 本文为大家讲解的是在linux下xdebug的安装和配置方法,感兴趣的同学参考下 ...

随机推荐

  1. Java中list对象的三种遍历方式

    1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); ...

  2. Delphi数据类型转换

    [转]Delphi数据类型转换 DateTimeToFileDate        将DELPHI的日期格式转换为DOS的日期格式 DateTimeToStr              将日期时间格式 ...

  3. MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用

    参阅官方文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm ...

  4. JS-键盘事件之方向键移动元素

    注意三点: 1:事件名称onkeydown. 2:事件加给document,而非window. 3: 把元素的top,left值分别用offsetTop,offsetLeft来设定. <!DOC ...

  5. TDD中的单元测试写多少才够?

    测试驱动开发(TDD)已经是耳熟能详的名词,既然是测试驱动,那么测试用例代码就要写在开发代码的前面.但是如何写测试用例?写多少测试用例才够?我想大家在实际的操作过程都会产生这样的疑问. 3月15日,我 ...

  6. 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树

    [BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...

  7. CH1809匹配统计【KMP】

    1809 匹配统计 0x18「基本数据结构」练习 描述 阿轩在纸上写了两个字符串,分别记为A和B.利用在数据结构与算法课上学到的知识,他很容易地求出了“字符串A从任意位置开始的后缀子串”与“字符串B” ...

  8. pandas的drop函数

    当你要删除某一行或者某一列时,用drop函数,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据. 1.命令: df.drop() 删除行:df.drop('apps') ...

  9. Git 基本操作(二)

    1. 分支操作 1.1 Fast-forward 当被合并分支(C4)位于合并分支(C2)的历史线上,此时的合并称为"fast-forward"; // hotfix 被合并到 m ...

  10. 洛谷P1736 创意吃鱼法 dp

    正解:dp 解题报告: 早就想写dp的题目辣!我发现我的dp好差啊QAQ所以看到列表的小朋友写dp的题目就跟着他们的步伐做下题好辣QwQ 这题的话没有那——么难,大概说下趴QwQ 首先说下题意 前面一 ...