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

embedded/2025/3/21 13:07:42/

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

文章来源:https://blog.csdn.net/qq_44967213/article/details/146212998
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/174046.html

相关文章

CAD-随缘:CAD导出PDF 与 PDF导入成CAD

前言&#xff1a; 绘制好CAD图纸&#xff0c;想导出成PDF进行交付&#xff1b;想将PDF格式文件在CAD中进行修改&#xff0c;就需要本次内容。 一、导出PDF&#xff1a; CAD导出PDF&#xff1a;直接使用CAD自带的案例。 快捷键&#xff0c;CtrlP&#xff0c;弹出批处理打印。…

easypoi导入Excel兼容日期和字符串格式的日期和时间

问题场景 在使用easypoi导入Excel时&#xff0c;涉及到的常用日期会有yyyy-MM-dd HH:mm:ss、yyyy-MM-dd和HH:mm:ss&#xff0c;但是Excel上面的格式可不止这些&#xff0c;用户总会输入一些其他格式&#xff0c;如 如果在定义verify时用下面这种格式定义&#xff0c;那么总会…

02 windows qt配置ffmpeg开发环境搭建

库下载: https://download.csdn.net/download/weixin_45413401/90497672 版本说明 首先我使用ffmpeg版本是4.2.1QT使用版本5.14.2我选择是c编译 <

使用Python实现经典贪吃蛇游戏教程

运行效果图如下&#xff0c;完整代码在文末 一、环境准备 安装Python 3.x安装pygame库&#xff1a;pip install pygame二、游戏功能说明 基本游戏机制 方向控制&#xff1a;↑ ↓ ← → 键控制蛇移动方向得分规则&#xff1a;每吃1个食物得1分碰撞检测&#xff1a;撞墙或自碰游…

革新协作体验 | 集和诚KMDA-2631协作机器人控制器重磅上市!

随着制造业对柔性生产的需求激增&#xff0c;协作机器人正成为工业升级的核心力量。它们以安全、灵活、易用的特点&#xff0c;与人类并肩完成精密任务。而这一切的背后&#xff0c;离不开一颗强大的“大脑”——KMDA-2631协作机器人控制器&#xff0c;作为集和诚研发中心的全新…

2025-03-17 学习记录--C/C++-PTA 习题4-7 最大公约数和最小公倍数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 习题4-7 最大公约数和最小公倍数 本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式: 输入在一…

Ansible命令行模式常用模块使用案例(三)

在Ansible中&#xff0c;命令行模式&#xff08;Ad-Hoc 模式&#xff09;是一种快速执行任务的方式&#xff0c;适合临时任务或简单操作。以下是 Ansible 命令行模式中常用模块的使用案例&#xff08;第三部分&#xff09;。 1 user 功能特性&#xff1a;用于管理用户账户&…

[HelloCTF]PHPinclude-labs超详细WP-Level 6Level 7Level 8Level 9-php://协议

由于Level 6-9 关的原理都是通用的, 这里就拿第6关举例, 其他的关卡同理 源码分析 定位到代码 isset($_GET[wrappers]) ? include("php://".$_GET[wrappers]) : ; 与前几关发生变化的就是 php:// 解题分析 这一关要求我们使用 php协议 php:// 协议 php://filte…