C#/WPF下的通用自动更新模块

前言

目前常见的中小型软件/开源软件的更新模式大致有以下几种:

  • 指引用户前往站点下载安装包自行覆盖安装。用户体验不太好,感觉很麻烦。代表有DBeaver/VirtualBox等;
  • 提醒用户执行更新,经过同意后,下载安装包并运行。用户体验稍微好了一些,代表有Bandizip/Notepad++等;
  • 软件在后台自动下载安装包,适时提醒用户执行更新,经过同意后运行安装包。这样能够节省用户的等待时间,代表有PotPlayer/FileZilla等。

一个完善的软件应当有着合理的更新机制。为了让用户获得更好的体验,更新过程应当是简便的、无痛的;为了提高开发者本身的效率,更新模块应当是通用的,可以快速地扩展到不同的项目中去。

同时,我认为软件应当是「绿色」的,即尽可能不提权,不写注册表,删除目录即卸载,不留垃圾文件。注意到上述的几种更新模式都使用了安装包作为最终媒介,这并不符合我的需求,因此我需要另行设计。如果你的项目符合我对「绿色」的定义,那么可以接着向下阅读。

文末将附上本项目源码(.NET4.5以上)。


特点

使用简单
整个模块包含两个可执行文件Uploader与Updater。开发者方面,编写一个简单的配置文件并使用Uploader执行,就可以将新版本与相关信息上传到服务器(需要具有用FTP与HTTP访问服务器上文件的权限);客户端方面,只需引用Updater并调用一个方法,即可自动完成检查/通知/下载/安装更新的整个过程。

节省空间和流量
上传的内容经过压缩(可选),节省服务器空间。同时,客户端在更新时仅下载有变化的文件,相比下载整个安装包的做法更加节省服务器流量与用户的时间。

可完全自定义的更新内容展示
通过XAML代码向用户展示更新内容。不仅能做出漂亮的展示界面,还可以在其中添加图片和视频。

可对自身进行更新
更新程序在临时文件夹中运行,不占用项目根目录中任何一个文件。


流程

开发者:

  1. 编写配置文件(包含更新内容描述等);
  2. 用Uploader打开配置文件;
  3. 等待上传完毕。

客户端:

  1. 在项目中引用Updater;
  2. 客户端程序运行时,调用Updater的检查更新方法,将在后台下载并检验更新信息;
  3. 若有新版本,把新版本描述展示给用户;
  4. 用户同意更新后,将Updater复制到临时目录并启动;
  5. Updater将当前版本文件内容与新版本进行对比,仅下载有变化的文件,显示下载进度;
  6. 下载完成后将新文件覆盖到项目根目录,启动主程序并退出Updater,完成更新。

配置文件解析

以下是一个配置文件的例子:

//必需区段,指定服务器地址

你可能感兴趣的:(C#,WPF,自动更新)