AutoUpdater.NET 是一款用于WPF、Winform软件版本更新的框架,类似框架还有Squirrel、WinSparkle、NetSparkle、Google Omaha。
一、Web端更新服务器配置
我们以本地IIS服务器为例介绍:(实际可以使用公网的服务器搭建网站进行更新)
勾选上诉功能完成IIS服务器安装。
在默认Web网站中新建两个文件夹,Downloads用于存放更新的文件(.zip的压缩文件),Updates用于存放更新的配置文件和更新的日志文件。
二、新建更新配置文件和日志文件 AutoUpdaterStarter.xml和UpdateLog.html
<?xml version='1.0' encoding="UTF-8"?> <item> <!--在版本标记之间提供应用程序的最新版本。版本必须为X.X.X.X格式。--> <version>1.0.0.1</version> <!--在url标签之间提供最新版本安装程序文件或zip文件的url。自动更新。NET下载这里提供的文件,并在用户按下Update按钮时安装它。--> <url>http://192.168.1.40/Downloads/Update.zip</url> <!--在changelog标记之间提供应用程序更改日志的URL。如果你不提供变更日志的URL,那么更新对话框将不会显示变更日志。--> <changelog>http://192.168.1.40/Updates/UpdateLog.html</changelog> <!--如果你不想让用户跳过这个版本,可以将其设置为true。这将忽略“稍后提醒”和“跳过”选项,并在更新对话框中隐藏“稍后提醒”和“跳过”按钮。--> <mandatory>false</mandatory> <!--可以在强制元素上提供minVersion属性。当您提供该选项时,只有当安装的应用程序版本小于您在这里指定的最小版本时才会触发强制选项。--> <!--mandatory minVersion="1.2.0.0">true</mandatory --> <!--args(可选):您可以在这个标记之间为安装程序提供命令行参数。您可以在命令行参数中包含%path%,它将被当前正在执行的应用程序所在目录的path所取代。--> <!--mandatory args="xxxxx">false</mandatory --> <!--提供更新文件的校验和。如果你做这个autotoupater。NET将在执行更新过程之前比较下载文件的校验和,以检查文件的完整性。 您可以在校验和标记中提供algorithm属性,以指定应该使用哪个算法来生成下载文件的校验和。目前支持MD5、SHA1、SHA256、SHA384和SHA512。--> <!--checksum algorithm="MD5">Update file Checksum</checksum --> </item>
<html> <body> <h1> UpDate </h1> </body> </html>
三、WPF软件更新配置
你的应用程序安装Autoupdater.NET.Official Nuget包。https://github.com/ravibpatel/AutoUpdater.NET
在初始化的位置配置更新的配置:
using System; using System.Globalization; using System.Reflection; using System.Threading; using System.Windows; using System.Windows.Threading; using AutoUpdaterDotNET; namespace AutoUpdaterTestWPF { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Assembly assembly = Assembly.GetEntryAssembly(); LabelVersion.Content = $"Current Version : {assembly.GetName().Version}";//显示版本号 Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("zh"); AutoUpdater.LetUserSelectRemindLater = true; AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Minutes; AutoUpdater.RemindLaterAt = 1; AutoUpdater.ReportErrors = true; DispatcherTimer timer = new DispatcherTimer {Interval = TimeSpan.FromMinutes(2)};//定时去检测更新根据自己业务需求 timer.Tick += delegate { AutoUpdater.Start("http://192.168.1.40/Updates/AutoUpdaterStarter.xml"); }; timer.Start(); } private void ButtonCheckForUpdate_Click(object sender, RoutedEventArgs e) { AutoUpdater.Start("http://192.168.1.40/Updates/AutoUpdaterStarter.xml"); } } }
这里简单介绍几个更新有用的配置:
//通过将其分配给InstalledVersion字段来提供自己的版本
AutoUpdater.InstalledVersion = new Version("1.2");
//查看中文版本
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture("zh");
//显示自定义的应用程序标题
AutoUpdater.AppTitle ="升级更新";
//不显示“稍后提醒”按钮
AutoUpdater.ShowRemindLaterButton = false;
//强制选项将隐藏稍后提醒,跳过和关闭按钮的标准更新对话框。
AutoUpdater.Mandatory = true;
AutoUpdater.UpdateMode = Mode.Forced;
//为XML、更新文件和更改日志提供基本身份验证
BasicAuthentication basicAuthentication = new BasicAuthentication("myUserName", "myPassword");
AutoUpdater.BasicAuthXML = AutoUpdater.BasicAuthDownload = AutoUpdater.BasicAuthChangeLog = basicAuthentication;
//为http web请求设置User-Agent
AutoUpdater.HttpUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36";
//启用错误报告
AutoUpdater.ReportErrors = true;
//将应用程序设定不需要管理员权限来替换旧版本
AutoUpdater.RunUpdateAsAdmin = false;
//打开下载页面,不直接下载最新版本*****
AutoUpdater.OpenDownloadPage = true;
//设置为要下载更新文件的文件夹路径。如果没有提供,则默认为临时文件夹。
//AutoUpdater.DownloadPath = Environment.CurrentDirectory;
//设置zip解压路径
AutoUpdater.InstallationPath = Environment.CurrentDirectory;
//处理应用程序在下载完成后如何退出
AutoUpdater.ApplicationExitEvent += AutoUpdater_ApplicationExitEvent;
//自定义处理更新逻辑事件
AutoUpdater.CheckForUpdateEvent += AutoUpdaterOnCheckForUpdateEvent;
在AutoUpdaterOnCheckForUpdateEvent事件中可以自己处理是否更新,在自定义的升级程序很有用处,可以自己定义升级的界面等。
四、更新包的打包
AutoUpdater.NET通过检测应用程序的版本号来判断需不需要更新软件,这里我们需要操作
软件更新后设置这里软件版本号,同时更新AutoUpdaterStarter.xml中的版本信息,UpdateLog.html里面的日志文件,然后将软件的Release版本打包为.zip放入Downloads文件夹中。
用户在运行旧版软件就会检测到新版的更新,然后选择是否进行更新。
注:测试时UpdateLog.html中使用中文会显示乱码,原因应该时这里嵌入的是IE内核的浏览器所以需要注意兼容IE浏览器。