当前位置: 首页 > article >正文

WPF程序使用AutoUpdate实现自动更新

AutoUpdate.NET使用

一、AutoUpdater.NET 简介

AutoUpdater.NET 是一个开源库,支持从各种源(如GitHub、FTP、HTTP服务器等)下载并安装更新。它提供了灵活的配置选项,允许开发者根据需求定制更新检查逻辑和用户体验。

二、安装 AutoUpdater.NET

你可以通过 NuGet 包管理器来安装 AutoUpdater.NET。在你的 Visual Studio 中,打开“包管理器控制台”,然后输入以下命令:

Install-Package AutoUpdater.NET

也可以通过nuget包的方式来安装:
在这里插入图片描述

三、AutoUpdater.NET 基本用法

1.配置更新源:首先需要配置一个版本更新文件,可以为Json格式也可以为Xml,该文件指明当前配置源的软件版本以及下载地址,软件版本用于客户端软件更新时进行校验。
2.检查更新:使用库提供的方法检查是否有新版本可用。
3.下载并安装更新:如果检测到新版本,下载更新包并自动安装。

四、使用IIS部署对应AutoUpdate.NET配置源文件以及软件程序

1.打开IIS新建网站,在网站添加对应文件夹为Downloads以及Updates文件夹
Downloads文件夹存放软件生成文件的压缩包、或者可以打包成可执行程序
Updates文件夹存放配置源文件 可以是Json格式也可以是XML
在这里插入图片描述

XML格式:

<?xml version='1.0' encoding="UTF-8"?>
<item>
    <!--在版本标记之间提供应用程序的最新版本。版本必须为X.X.X.X格式。-->
    <version>1.0.1.1</version>
 
    <!--在url标签之间提供最新版本安装程序文件或zip文件的url。自动更新。NET下载这里提供的文件,并在用户按下Update按钮时安装它。-->
    <url>http://127.0.0.1/Downloads/Updates.zip</url>
    <!--在changelog标记之间提供应用程序更改日志的URL。如果你不提供变更日志的URL,那么更新对话框将不会显示变更日志。-->
    <!--如果你不想让用户跳过这个版本,可以将其设置为true。这将忽略“稍后提醒”和“跳过”选项,并在更新对话框中隐藏“稍后提醒”和“跳过”按钮。-->
    <!--mandatory mode="2">true</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>

XML文件中可以配置源更新的很多属性,例如当前服务端最新的软件版本号,以及是否强制用户进行更新属性。
Url属性可以配置软件更新的文件形式以及地址,这里可以使用打包的Updates.exe执行程序

五、客户端代码设置

示例:

using AutoUpdaterDotNET;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace AutoUpdateTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //这里编写自定义触发事件
            AutoUpdater.CheckForUpdateEvent += AutoUpdater_CheckForUpdateEvent;
        }

        private void AutoUpdater_CheckForUpdateEvent(UpdateInfoEventArgs args)
        {
        	//请求是否有问题
            if (args.Error == null)
            {
            	//检测当前版本是否可以更新
                if (args.IsUpdateAvailable)
                {
                    var result = MessageBox.Show("发现新版本",$"V{args.InstalledVersion}",MessageBoxButton.YesNo);
                    if (result == MessageBoxResult.Yes)
                    {
                        if (AutoUpdater.DownloadUpdate(args))
                        {
                            Environment.Exit(0);
                        }
                    }
                }
            }
        }
		
		//此处点击触发更新事件
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //指定当前版本
            AutoUpdater.InstalledVersion = new Version("1.0.1.0");//当前的App版本
            AutoUpdater.HttpUserAgent = "AutoUpdater";
            AutoUpdater.ReportErrors = true;

            //AutoUpdater.ShowSkipButton = false;//禁用跳过
            //AutoUpdater.ShowRemindLaterButton = false;//禁用稍后提醒

            稍后提醒设置
            //AutoUpdater.LetUserSelectRemindLater = false;
            //AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Days;
            //AutoUpdater.RemindLaterAt = 2;
            //AutoUpdater.TopMost = true;
			//此处的url为服务器存放的xml文件地址
            AutoUpdater.Start("http://127.0.0.1:7077/Updates/AutoUpdaterStarter.xml");
        }
    }
}

使用生成文件zip压缩包的形式更新,将debug文件夹中文件打包放入服务器Downloads文件夹

并且更新此时Updates文件夹中xml的文件版本到1.0.1.1

此时点击更新,由于客户端此时版本为V1.0.1.0 服务器配置源文件为V1.0.1.1

满足触发更新的条件,于是从xml的下载链接中下载对应zip压缩包并且解压到对应设置的目录

//设置下载后的压缩包存储地址 如果不设置采用默认
 AutoUpdater.DownloadPath = AppDomain.CurrentDomain.BaseDirectory+@"\AutoUpdater";
 //设置安装地址 对于zip压缩包 对应的就是解压的地址
 AutoUpdater.InstallationPath = AppDomain.CurrentDomain.BaseDirectory;

对应zip压缩包会下载到设置的地址
在这里插入图片描述

更新前 V1.0.1.0
在这里插入图片描述

点击更新
在这里插入图片描述

更新后 版本V1.0.1.2
在这里插入图片描述

常见问题

401-未授权:由于凭证无效,访问被拒绝
原因:文件访问未授权
症状:HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。
分析:
由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无法访问。
解决方案:
(1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用:
控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。
(2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限:
开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。
注意:一般自定义 IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。

选择服务器存放文件的文件夹
属性->安全->编辑->添加->高级->立即查找->找到IUSR->添加->设置权限完全控制

参考:https://blog.csdn.net/Tiger_shl/article/details/80618097

参考链接:

https://github.com/ravibpatel/AutoUpdater.NET
https://www.cnblogs.com/congroo/p/15655717.html


http://www.kler.cn/a/585787.html

相关文章:

  • Secs/Gem第一讲(基于secs4net项目的ChatGpt介绍)
  • 完善机器人:让 DeepSeek 使用Vue Element UI快速搭建 AI 交互页面
  • 【Linux系统编程】管道
  • 什么是mysql索引回表?
  • 杨辉三角形(信息学奥赛一本通-2043)
  • 智慧应急消防解决方案(35页PPT)(文末有下载方式)
  • doris:SQL 方言兼容
  • 【0x80070666】-已安装另一个版本...(Tableau 安装失败)
  • 裸机开发-GPIO外设
  • Android的第一次面试(Java篇)
  • 为什么 JPA 可以通过 findByNameContaining 自动生成 SQL 语句?
  • 如何在PHP中实现数据加密与解密:保护敏感信息
  • 小语言模型(SLM)技术解析:如何在有限资源下实现高效AI推理
  • 《CircleCI:CircleCI:解锁软件开发持续集成(CI)和持续部署(CD)高效密码》:此文为AI自动生成
  • Windows 上安装配置 Maven
  • WVP前后端部署
  • Java 大视界 -- Java 大数据分布式计算中的资源调度与优化策略(131)
  • 基于Python的物联网智慧农业数据采集与管理系统设计方案
  • 登录认证-登录校验-Filter
  • c++常用的算术生成算法