最近给程序加了一个自动更新的功能,使用的是一个开源库,也花了点时间拜读了下源码,代码还是很有学习的价值的,这里做下小结。
开源库地址:https://github.com/ravibpatel/AutoUpdater.NET, 有需要的小伙伴可以试试,简单方便!
首先看看自动更新是如何工作的。
自动跟新程序从服务器下载包含更新信息的XML文件。它使用这个XML文件来获取软件的最新版本的信息。如果软件的最新版本比用户电脑上安装的软件的当前版本更强大,那么自动下载软件。NET向用户显示更新对话框。如果用户按下更新按钮来更新软件,则从XML文件中提供的URL下载更新文件(安装程序),并执行刚刚下载的安装程序文件。安装程序将在此之后执行更新。如果你提供zip文件URL而不是安装程序,自动更新城西将把zip文件的内容解压缩到应用程序目录中。
更新界面提供了三个选项,忽略当前的版本,延时更新,立即跟新!
服务器上的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>2.0.0.0</version>
<url>http://rbsoft.org/downloads/AutoUpdaterTest.zip</url>
<changelog>https://github.com/ravibpatel/AutoUpdater.NET/releases</changelog>
<mandatory>false</mandatory>
</item>
这里,version和url是必须提供的,一个最新的版本号,一个是最新版本程序的下载地址。changelog是更新日志,可以不提供,不提供的话,更新界面不会显示,mandatory是是否强制下载,设置为true.将隐藏忽略和延时下载两个按钮。这个节点还可以添加其他属性,
<mandatory mode="2">true</mandatory>
mode(属性,可选):你可以在强制元素上提供模式属性来改变强制标志的行为。如果你提供“1”作为模式属性的值,那么它也会隐藏更新对话框上的关闭按钮。如果你提供“2”作为模式属性的值,那么它将跳过更新对话框,并自动开始下载和更新应用程序。
<mandatory minVersion="1.2.0.0">true</mandatory>
minVersion(属性,可选):也可以在强制元素上设置minVersion属性。当您提供它时,只有当应用程序的安装版本小于您在这里指定的最小版本时,才会触发强制选项。
使用方式:
添加引用:using AutoUpdaterDotNET;
调用启动函数: AutoUpdater.Start("http://rbsoft.org/updates/AutoUpdaterTest.xml");
这里也可以使用Json文件,具体可参考开源库的文档。
源码中涉及到技术在此记录可供参考借鉴: json字符串的解析,xml序列化,注册表的读和写,压缩文件的解压,网络文件的下载(进度的实时更新)
源码使用了C#7.0的新特性,最好使用VS2017及以上打开,要不然会报错!