本类库+工具用于快速实现一个简单的自动更新程序,旨在快速简单地为现有的.Net应用程序添加上比较简单的自动更新功能。

本页包含以下内容
  • 概述
  • 整个自动升级工作的流程
  • 更新包生成工具
  • 发布更新包
  • 为应用程序添加自动更新功能
  • 结束
概述[导航]

本类库+工具用于快速实现一个简单的自动更新程序,可以简单地完成小型应用程序的快速更新。

整个工具分成两部分,一部分是供用户使用的类库,一部分是用于生成更新包的工具。

基于 .Net 3.5 开发,原则上最好安装有此版的 .netFramework。特殊情况下,可以仅安装 .Net Framework 2.0SP1,发布的时候附带上 System.Core.dll 即可正常运行。

整个自动升级工作的流程[导航]

更新包生成工具[导航]

作为一个简单的升级需求,不需要很复杂的设置。

需要填写如下信息:

  1. 应用程序名
  2. 当前的版本(也就是更新后的版本)
  3. 发布地址可选(如果填写了,在更新提示框上会有个链接可以链接到这个网址)
  4. 新程序目录(选择最新版本程序的发布目录,在版本 1.5.0.0 之后你可以直接从资源管理器中拖放目标文件夹到目录的文本框来快速选择了!)
  5. 升级包路径:选择一个路径用来保存升级包(*.zip),同时自动更新信息 *.xml 也会保存在这个目录下
  6. 更新前执行:在下载完成、即将安装更新前会执行这里选择的程序。这里有点BUG一旦选择了就不能取消,所以请注意下;
  7. 更新后执行:在安装完成后、即将退出前执行的操作。需要注意的BUG同上。通常选择需要运行的主程序。
  8. 执行时间限制:用于限制6中选择的程序的执行时间,超过设置的时间后进程将会被强行结束。
  9. 更新说明:用于提示更新的时候显示的文本消息内容。
  10. 创建:按照填写的信息生成升级包
  11. 打开:打开一个已有的升级信息文件,用于下次更新版本时直接修改信息即可,其它的不需要变化(在1.5.0.0之后,你可以通过直接拖放以前保存的升级XML文件到窗体上直接打开了!)。

选项页面

  • 更新时删除原始文件:默认情况下仅覆盖新文件。但是你可以设置更新之前删除应用程序目录所有文件,或删除指定文件。
  • 支持更新的最低版本:指定支持更新的最低版本,低于此版本的软件将会提示手动更新
  • 升级文件包密码:可以设置一个密码,用来加密生成的压缩包

发布更新包[导航]

更新包应该发布到服务器上。生成的文件有两个,一个是压缩包(*.zip),一个是信息文件(*.xml),两个应该一起发布。这里假定通过网址 http://ls.com/update.xml 能访问到生成的 update.xml 文件。

为应用程序添加自动更新功能[导航]

注意:自动升级程序取当前程序文件的版本,是以当前运行的程序集版本作为识别依据的。

首先在VS中为当前的主程序项目添加引用,引用“客户端”中的“SimpleUpdater.exe”。

在VS中,点开“解决方案管理器”中相应项目的“属性”节点,打开 AssemblyInfo.cs 文件,在最下面添加上一行自动更新声明:

  1. //--添加这行标记表示支持自动更新, 后面的网址为自动更新的根目录.
  2. [assembly: FSLib.App.SimpleUpdater.Updateable("http://ls.com/update.xml")]

这步是必须的,否则请求检查更新时会抛出异常;代码中的网址即上面提到的能访问到xml文件的网址。

如果您希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明:

  • 使用 FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple("升级网址") 的重载方法。这个重载方法允许你传入一个升级包的地址;
  • 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。

无论使用哪种方式,请确保在检查更新前,地址已经设置。

到这里,准备工作即告完成,为代码添加上检查更新的操作即可。

  1. static class Program
  2. {
  3. /// <summary>
  4. /// 应用程序的主入口点。
  5. /// </summary>
  6. [STAThread]
  7. static void Main()
  8. {
  9. Application.EnableVisualStyles();
  10. Application.SetCompatibleTextRenderingDefault(false);
  11. var updater = FSLib.App.SimpleUpdater.Updater.Instance;
  12. //当检查发生错误时,这个事件会触发
  13. updater.Error += new EventHandler(updater_Error);
  14. //没有找到更新的事件
  15. updater.NoUpdatesFound += new EventHandler(updater_NoUpdatesFound);
  16. //找到更新的事件.但在此实例中,找到更新会自动进行处理,所以这里并不需要操作
  17. //updater.UpdatesFound += new EventHandler(updater_UpdatesFound);
  18. //开始检查更新-这是最简单的模式.请现在 assemblyInfo.cs 中配置更新地址,参见对应的文件.
  19. FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple();
  20. /*
  21. * 如果您希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明:
  22. * 使用Updater.CheckUpdateSimple 的重载方法。这个重载方法允许你传入一个升级包的地址;
  23. * 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。
  24. */
  25. FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple("升级网址");
  26. Application.Run(new Form1());
  27. }
  28. static void updater_UpdatesFound(object sender, EventArgs e)
  29. {
  30. }
  31. static void updater_NoUpdatesFound(object sender, EventArgs e)
  32. {
  33. System.Windows.Forms.MessageBox.Show("没有找到更新");
  34. }
  35. static void updater_Error(object sender, EventArgs e)
  36. {
  37. var updater = sender as FSLib.App.SimpleUpdater.Updater;
  38. System.Windows.Forms.MessageBox.Show(updater.Exception.ToString());
  39. }
  40. }

结束[导航]

详细的代码请参考附带的示例项目。

检查到更新时窗口如下:

这之后的更新操作都是全自动执行的,不需要在主程序中有任何其它操作。

https://www.fishlee.net/soft/simple_autoupdater/usage.html

SimpleUpdater.NET相关推荐

  1. 使用SimpleUpdater实现WinForm自动升级

    1.使用NuGet安装SimpleUpdater 我使用的是Visual Studio 2017,右键引用,管理NuGet包,如下: 2.设置项目版本Assembly Version 右键项目属性,打 ...

  2. Spark排序算法系列之(MLLib、ML)LR使用方式介绍(模型训练、保存、加载、预测)

    转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...

  3. 4.Abp vNext 地磅无人值守 Winform 客户端搭建

    地磅无人值守项目 系列文章目录 文章目录 前言 一.基础功能 1. 一台电脑启动一次客户端 2. 日志记录 3. 自动升级功能 二.对接硬件设备 1.对接摄像头 总结 前言 客户端主要是管控车辆进出场 ...

  4. spark机器学习笔记:(五)用Spark Python构建分类模型(下)

    声明:版权所有,转载请联系作者并注明出处  http://blog.csdn.net/u013719780?viewmode=contents 博主简介:风雪夜归子(英文名:Allen),机器学习算法 ...

最新文章

  1. PLSQ执行同样的sql,使用mybatis进行动态拼装执行的时候非常慢的问题解决
  2. ASP.Net网站开发的单元测试方案
  3. C# 使用 Lotus notes 公共邮箱发送邮件
  4. 【软件质量】代码注释的消极作用
  5. good-Windows下搭建PHP开发环境(Apache+PHP+MySQL)
  6. Effective C++ Notebook
  7. TeeChart.NET 4.2021.11.2 Crack
  8. 数据仓库与数据挖掘课后思考题整理
  9. BA--干球温度、露点温度和湿球温度--概念
  10. 1t98cp.com main.php,SCTF2019 Writeup——De1ta
  11. 解决 MDK 5 无法生成 .axf 文件的问题
  12. 高数——关于微分方程共轭复根引发的复数思考
  13. 王家林人工智能AI 第七节课:四种性能优化Matrix编写AI框架实战(Gradient Descent的陷阱、及几种常见的性能优化方式实战)老师微信13928463918
  14. 未找到beta版怎么解决_你要的直播解决方案来了!无需采集卡!
  15. Adobe Premiere Pro CC教程笔记
  16. 2017计算机组装,2017电脑组装配置
  17. python要安装文本编辑器吗_python安装后推荐的安装两款文本编辑器
  18. 易语言QQpost加好友源码
  19. vb.net——通过邮箱动态发送验证码实现完美注册
  20. 【无人机组装与调试】 第五章 无人机遥控器

热门文章

  1. C++Saddleback search鞍背搜索的实现算法(附完整源码)
  2. c++Selection Sort选择排序的实现算法(附完整源码)
  3. C++实现线性递归矩阵 linear recurrence matrix算法(附完整源码)
  4. C语言侏儒排序Gnome sort 算法(附完整源码)
  5. QT的QRubberBand类的使用
  6. QT的QInputDialog类的使用
  7. SQLite 表达式(http://www.w3cschool.cc/sqlite/sqlite-expressions.html)
  8. 取第N个排序的元素之Mysql存储过程动态SQL order by offset实现案例
  9. 处理字符串_3_处理含引号的字符串
  10. centos 开机启动java_Centos 7将java jar包自定义开机启动服务