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.rhkb.cn/news/35844.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen2-Audio:通义千问音频大模型技术解读

引言:从llm到mlm(audio) 大型语言模型(LLM)的发展日新月异,它们在文本理解、生成、推理等方面展现出惊人的能力。然而,交互模态不仅仅依赖于文字,语音、语调、环境音等听觉信息同样承载着丰富的内容。阿里巴巴通义千问团队,推出了 Qwen-Audio 系列模型,这里我们一起…

问题 | ACOS(X) 与 ACOSD(X)的区别

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 [TOC](ACOS(X) 与 ACOSD(X)的区别) ACOSD(X) 是反余弦函数&#xff0c;结果以角度形式表示。ACOS(X) 用于计算 X 中每个元素的反余弦值。当 X 为复数时&#xff0c;结…

两款软件助力图片视频去水印及图像编辑

今天给大家分享两款呼声很高的软件&#xff0c;它们都能处理图片和视频去水印相关的问题。其中一款软件在去水印的同时&#xff0c;图像编辑功能也十分出色&#xff1b;另一款软件专注于图片和视频去水印&#xff0c;去除效果好且支持批量处理。下面就来详细了解一下。 Remover…

Hessian矩阵详解与应用

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…

【软件系统架构】单体架构

一、引言 在软件开发的漫长历程中&#xff0c;架构的选择一直是至关重要的决策。单体架构作为一种经典的架构模式&#xff0c;曾经在许多项目中发挥着不可替代的作用。虽然如今微服务等架构逐渐流行&#xff0c;但理解单体架构对于深入掌握软件架构体系仍然有着重要意义。 二、…

[C++初阶] :从C到C++

目录 C发展史&#xff0c;C语言的特性C新增关键字namespace关键字C语言的命名缺陷&#xff08;重定义现象&#xff09;域与指定访问操作符 “::”命名空间域详解namespace std C的输入与输出函数重载什么是重载,重载的几种常见形态重载的作用注意不构成重载的情况 缺省参数1.全…

[快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发

目录 数据库设计流程 三张表 测试 接口设计 部门管理接口文档 1. 查询所有部门 2. 新增部门 ⭕3. 根据ID查询部门 4. 修改部门 5. 删除部门 &#xff08;部门分页条件查询&#xff09; 错误响应示例 接口设计规范 服务端开发 接口开发 数据库设计流程 01 明确业…

实用插件推荐 -------- 一个可以将任意语言(python、C/C++、go、java等)的程序转换为汇编语言的小插件

链接为&#xff1a; Compiler Explorer 界面&#xff1a; 参考自&#xff1a;如何获取虚函数表及内存分析_com的虚函数表怎么寻找-CSDN博客

vue学习八

十七 组件通信方式 1 props 父传子 //父组件 <script setup>//book来源省略import Subview1 from ./Subview1.vue;function updatebook(updatetimes){book.value.updatetimes updatetimes} </script> <template><Subview1 :book"book" :upd…

51单片机的寻址方式(完整)

目录 一、立即数寻址 二、直接寻址 三、寄存器寻址 四、寄存器间接寻址 五、变址寻址 六、位寻址 七、指令寻址 &#xff08;一&#xff09;绝对寻址 &#xff08;二&#xff09;相对寻址 在 51 单片机中&#xff0c;寻址方式是指在执行指令时&#xff0c;CPU 寻找操作…

每日一题:动态规划

如题&#xff08;基础题&#xff09;&#xff1a; 经典的爬楼梯问题&#xff0c;先从递归想起&#xff1b; class Solution { public:int climbStairs(int n) {if(n1)return 1;if(n2)return 2;return climbStairs(n-1)climbStairs(n-2);} }; 之后可以想办法&#xff08;如哈希…

【论文阅读】FairCLIP - 医疗视觉语言学习中的公平性提升

FairCLIP - 医疗视觉语言学习中的公平性提升 1.研究背景与动机2.核心贡献3.方法论细节4.实验结果与洞见5.总结 FairCLIP: Harnessing Fairness in Vision-Language Learning FairCLIP - 医疗视觉语言学习中的公平性提升 Accepted by CVPR2024 github:链接 1.研究背景与动机…

Linux 入门:权限的认识和学习

目录 一.shell命令以及运行原理 二.Linux权限的概念 1.Linux下两种用户 cannot open directory .: Permission denied 问题 2.Linux权限管理 1).是什么 2).为什么&#xff08;权限角色目标权限属性&#xff09; 3).文件访问者的分类&#xff08;角色&#xff09; 4).文…

大语言模型的压缩技术

尽管人们对越来越大的语言模型一直很感兴趣&#xff0c;但MistralAI 向我们表明&#xff0c;规模只是相对而言的&#xff0c;而对边缘计算日益增长的兴趣促使我们使用小型语言获得不错的结果。压缩技术提供了一种替代方法。在本文中&#xff0c;我将解释这些技术&#xff0c;并…

Java高频面试之集合-14

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;为什么 HashMap 的容量是 2 的倍数呢&#xff1f; HashMap的容量被设计为2的幂次&#xff0c;主要基于以下原因&#xff…

TreelabPLMSCM数字化供应链解决方案0608(61页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;TreelabPLMSCM 数字化供应链解决方案 0608 在当今快速变化的市场环境中&#xff0c;企业面临着诸多挑战&#xff0c;Treelab 数智化 PLM_SCM 行业解决方案应运而生。该方案聚焦市场趋势与行业现状&#xff0c;致力于解…

Docker搭建MySQL主从服务器

一、在主机上创建MySQL配置文件——my.cnf master服务器配置文件路径&#xff1a;/data/docker/containers/mysql-cluster-master/conf.d/my.cnf slave服务器配置文件路径&#xff1a; /data/docker/containers/mysql-cluster-master/conf.d/my.cnf master服务配置文件内容 …

JS逆向案例-HIKVISION-视频监控的前端密码加密分析

免责声明 本文仅为技术研究与渗透测试思路分享,旨在帮助安全从业人员更好地理解相关技术原理和防御措施。任何个人或组织不得利用本文内容从事非法活动或攻击他人系统。 如果任何人因违反法律法规或不当使用本文内容而导致任何法律后果,本文作者概不负责。 请务必遵守法律…

SENT接口

文章目录 前言SENT接口简介物理层数据链路层编码方式帧结构消息格式短串行消息格式增强型串行消息格式 CRC校验和CRC4CRC6 错误检测机制 IP 设计结构框图接口设计上板验证 前言 本文参考标准《SAE J2716_201604》。 SENT接口 简介 SENT&#xff08;Single Edge Nibble Tran…

Qt-搭建开发环境

1.环境搭建 开发工具概述&#xff1a; Qt ⽀持多种开发⼯具&#xff0c;其中⽐较常⽤的开发⼯具有&#xff1a;Qt Creator、Visual Studio、Eclipse. 1.1Qt Creator Qt Creator 是⼀个轻量级的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为使⽤ Qt 框架进…