WinForm、Wpf自动升级 AutoUpdater.NET
Github
AutoUpdater.NET
目录
一、IIS部署 更新站点
二、创建Winform
一、IIS部署 更新站点
IIS默认站点目录下创建 目录 Downloads、Updates
Updates目录创建文件 UpdateLog.html、AutoUpdaterStarter.xml
UpdateLog.html:
<html><body><h1>UpDate</h1></body></html>
AutoUpdaterStarter.xml:
url节点 为下载更新的地址 http://127.0.0.1/Downloads/fr.zip
<?xml version='1.0' encoding="UTF-8"?>
<item><!--在版本标记之间提供应用程序的最新版本。版本必须为X.X.X.X格式。--><version>1.0.0.2</version><!--在url标签之间提供最新版本安装程序文件或zip文件的url。自动更新。NET下载这里提供的文件,并在用户按下Update按钮时安装它。--><url>http://127.0.0.1/Downloads/fr.zip</url><!--在changelog标记之间提供应用程序更改日志的URL。如果你不提供变更日志的URL,那么更新对话框将不会显示变更日志。--><changelog>http://127.0.0.1/Updates/UpdateLog.html</changelog><!--如果你不想让用户跳过这个版本,可以将其设置为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>

二、创建Winform
netcore 3.1 + Winform
nuget安装包
Autoupdater.NET.Official --版本1.8.0
2.1创建MainForm
http://127.0.0.1/Updates/AutoUpdaterStarter.xml 为IIS站点更新配置文件
检查版本
public partial class MainForm : Form{public MainForm(){InitializeComponent();Assembly assembly = Assembly.GetEntryAssembly();label1.Text = $"{assembly.GetName().Version}";//显示版本号AutoUpdatorHelper.Start("http://127.0.0.1/Updates/AutoUpdaterStarter.xml", this);}private void button1_Click(object sender, EventArgs e){AutoUpdater.Start("http://127.0.0.1/Updates/AutoUpdaterStarter.xml");//手动更新}public class AutoUpdatorHelper{/// <summary>/// 自动更新/// </summary>/// <param name="serverPath"></param>/// <param name="synchronizeInvoke"></param>public static void Start(string serverPath, ISynchronizeInvoke synchronizeInvoke){#region 每隔60秒检查一次更新(判断依据是AssemblyInfo中的版本和xml文件的版本是否一致,如果服务器xml文件的版本大于AssemblyInfo中的版本则触发CheckForUpdateEvent)System.Timers.Timer timer = new System.Timers.Timer{Interval = 60 * 1000,//毫秒SynchronizingObject = synchronizeInvoke};timer.Elapsed += (object sender, ElapsedEventArgs e) =>{AutoUpdater.Start(serverPath, Assembly.GetExecutingAssembly());};timer.Start();#endregionAutoUpdater.LetUserSelectRemindLater = true;AutoUpdater.RemindLaterTimeSpan = RemindLaterFormat.Minutes;AutoUpdater.RemindLaterAt = 1;//若您不想在更新表单上显示“跳过”按钮,那个么只需在上面的代码中添加以下行即可。AutoUpdater.ShowSkipButton = false;//如果要同步检查更新,请在启动更新之前将Synchronous设置为true,如下所示。AutoUpdater.Synchronous = true;//若你们不想在更新表单上显示“以后提醒”按钮,那个么只需在上面的代码中添加以下一行即可。AutoUpdater.ShowRemindLaterButton = false;//如果要忽略先前设置的“以后提醒”和“跳过”设置,则可以将“强制”属性设置为true。它还将隐藏“跳过”和“稍后提醒”按钮。如果在代码中将强制设置为true,那么XML文件中的强制值将被忽略。AutoUpdater.Mandatory = false;//您可以通过添加以下代码来打开错误报告。如果执行此自动更新程序。NET将显示错误消息,如果没有可用的更新或无法从web服务器获取XML文件。AutoUpdater.ReportErrors = true;//如果服务器xml文件的版本大于AssemblyInfo中的版本则触发CheckForUpdateEventAutoUpdater.CheckForUpdateEvent += (args) =>{if (args.Error == null){//检测到有可用的更新if (args.IsUpdateAvailable){DialogResult dialogResult;if (args.Mandatory.Value){dialogResult =MessageBox.Show($@"当前有一个新版本{args.CurrentVersion}可用.你正在使用版本{args.InstalledVersion}.点击确认开始更新", @"更新可用",MessageBoxButtons.OK,MessageBoxIcon.Information);}else{dialogResult =MessageBox.Show($@"当前有一个新版本{args.CurrentVersion}可用.你正在使用版本{args.InstalledVersion}.确认要更新吗?", @"更新可用",MessageBoxButtons.YesNo,MessageBoxIcon.Information);}if (dialogResult.Equals(DialogResult.Yes) || dialogResult.Equals(DialogResult.OK)){try{//触发更新下载if (AutoUpdater.DownloadUpdate(args)){Application.Exit();}}catch (Exception exception){MessageBox.Show(exception.Message, exception.GetType().ToString(), MessageBoxButtons.OK,MessageBoxIcon.Error);}}}else{MessageBox.Show($@"当前为最新新版本", @"更新可用",MessageBoxButtons.OK,MessageBoxIcon.Information);}}else{if (args.Error is WebException){MessageBox.Show(@"连接更新服务器失败,请检查网络连接.",@"更新检查失败", MessageBoxButtons.OK, MessageBoxIcon.Error);}else{MessageBox.Show(args.Error.Message,args.Error.GetType().ToString(), MessageBoxButtons.OK,MessageBoxIcon.Error);}}};}}}
2.2打包
winfrom生成文件添加到压缩文件 fr.zip,复制到IIS站点Downloads目录下

2.3更新

手动更新

自动更新从版本1.0.0.1 更新到1.0.0.2 
相关文章:
WinForm、Wpf自动升级 AutoUpdater.NET
Github AutoUpdater.NET 目录 一、IIS部署 更新站点 二、创建Winform 一、IIS部署 更新站点 IIS默认站点目录下创建 目录 Downloads、Updates Updates目录创建文件 UpdateLog.html、AutoUpdaterStarter.xml UpdateLog.html: <html><body><h1…...
GPU不够用:语言模型的分布式挑战
引言 随着深度学习技术的飞速发展,大规模语言模型(LLM)在各种NLP任务中取得了令人瞩目的成绩。然而,这些模型的大小和复杂度也不断增加,给部署和应用带来了诸多挑战。特别是在单个GPU或服务器的内存容量有限的情况下,如何高效地利用分布式计算资源成为了一个亟待解决的问…...
深入理解Redis中的渐进式Rehash技术
1. 引言 Redis是一款高性能的键值存储系统,被广泛应用于缓存、队列、计数器等场景,因其快速、稳定的特性备受开发者青睐。在Redis的背后,有着许多复杂的数据结构和算法支撑着其高效运行,而其中之一就是Rehash操作。 Rehash是Redis中的一个关键操作,负责在数据量增加时对…...
数据结构 栈和队列 力扣例题AC——代码以及思路记录
20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应…...
管理类联考--复试--英文面试--各校英文面试内容
文章目录 北京地区北京大学中国人民大学北京交通大学北京航空航天大学北方工业大学北京林业大学北京语言大学中央财经大学对外经济贸易大学首都经济贸易大学华北电力大学中国矿业大学中国石油大学北京国家会计学院中国财政科学院研究院北京理工大学北京工商大学中国农业大学 湖…...
Android修行手册-Chaquopy中opencv、numpy的初步应用
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...
VBA将当前打开的表格生成PDF图片
前言 VBA将当前的表格存储成PDF文件进行存储 代码 Sub ExportToPDF()Dim FilePath As StringDim FileName As StringDim ExportRange As Range 设置导出文件路径及名称FilePath "D:\Users\"FileName "ExportedPDF" 设置导出区域范围Set ExportRange Ra…...
解锁AI大模型秘籍:未来科技的前沿探索
在当今这个技术高速发展的时代,人工智能(AI)已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定,AI的应用范围日益扩大,其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…...
一文带你了解MySQL之B+树索引的原理
前言 学完前面我们讲解了InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查…...
【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...
报错如下 根目录添加 .env.local 文件 .env.local :本地运行下的配置文件 配置:VUE_GITHUB_USER_NAME 及 VUE_APP_SECRET_KEY 原因...
中国电子学会2020年06月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2020年06月 编程题五道 总分:100分一、最接近的分数(20分) 分母不超过N且小于A/B的最大最简分数是多少? 时间限制: 1000ms 内存限制: 65536kb 输入…...
WPF的DataGrid自动生成中文列头
直接将一个对象集合绑定到DataGrid上面,设置自动生成列AutoGenerateColumns"True",DataGrid会自动根据对象类的属性生成对应的列 示例类对象: public class DataModel{public int Id { get; set; }public string Name { get; set;…...
CSS【详解】居中对齐 (水平居中 vs 垂直居中)
水平居中 内部块级元素的宽度要小于容器(父元素) 方案一:文本居中对齐(内联元素) 限制条件:仅用于内联元素 display:inline 和 display: inline-block; 给容器添加样式 text-align:center<!DOCTYPE html> <html lang&q…...
【排序算法】基数排序
一:基本概念 1.1 基数排序(桶排序)介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是…...
解释存储过程和函数的区别,以及它们在MySQL中的用途。如何创建和使用存储过程和函数?
解释存储过程和函数的区别,以及它们在MySQL中的用途。 存储过程和函数在MySQL中的区别及用途 区别: 返回值: 函数:必须有一个返回值,这可以是一个标量值或一个表。如果没有明确的RETURN语句,函数将返回N…...
【GPU驱动开发】-GPU架构简介
前言 不必害怕未知,无需恐惧犯错,做一个Creator! GPU(Graphics Processing Unit,图形处理单元)是一种专门用于处理图形和并行计算的处理器。GPU系统架构通常包括硬件和软件层面的组件。 一、总体流程 应…...
m位数问题(c++题解)
题目描述 考官只给两个整数n和m(1 < n < 8,1< m <5),要求选手从1,2,…,n中取出m个数字,组成一个m位整数,统计所有的m位整数中一共有多少个素数。 如n3,m2时,符合条件的整数有&…...
洛谷P1331海战
题目背景 在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了 F-2003 飞机。 此外,巡洋船只和舰队将被派去保护海岸线。不幸的是,因为种种原因,国防海军部仅有很少…...
如何利用Flutter来写后端 服务端应用
前言 Flutter是谷歌推出的一款跨平台开发框架,现在属于此领域star最多的框架,其被广泛应用于构建前台界面,但或许很少人知道,他也可以写后端应用。 本文主角 flutter非常著名的getx库推出的get server jonataslaw/get_server:…...
数据页和缓存页(BufferPool)
1. 数据页(dataPage) 什么是数据页? 数据页是 MySQL 存储引擎在磁盘和内存之间传输数据的基本单位,默认大小为16KB。 数据页的结构: 表头:储存与页相关的元信息,比如,页号&#…...
建筑热成像检测数据集 建筑物表面缺陷图像识别 建筑外墙保温缺陷检测、管道热损失识别 建筑物表面温度识别第10357期(代码+数据集+模型+界面)
建筑热成像检测数据集 README数据集核心信息表项目详情类别数量及名称1 类(定义缺陷具体类别)样本数量200张格式种类YOLO 格式核心应用价值支持建筑热工性能检测模型开发、建筑能耗异常定位算法训练、建筑保温层缺陷识别系统搭建数据集核心要素概述 1. 类…...
思科模拟器实战:交换机与路由器的综合网络配置实验
1. 实验环境搭建与设备初始化 第一次打开思科模拟器时,看着满屏的设备图标可能会有点懵。别担心,我们先从最基础的设备连接开始。这个实验需要两台路由器(型号建议用2911)、一台交换机(比如2960)࿰…...
深入解析Unity粒子系统Renderer模块:从基础渲染到高级光照控制
1. 粒子系统Renderer模块的核心作用 第一次接触Unity粒子系统时,我被Renderer模块里密密麻麻的参数吓到了。直到做了个烟花特效项目才发现,这个看似复杂的模块其实是让粒子"活起来"的关键。简单来说,它就像化妆师,决定…...
二分查找力扣题(leetcode)味
一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...
终极指南:MediaCMS无缝集成第三方系统——SAML认证与API对接全攻略
终极指南:MediaCMS无缝集成第三方系统——SAML认证与API对接全攻略 【免费下载链接】mediacms MediaCMS is a modern, fully featured open source video and media CMS, written in Python/Django and React, featuring a REST API. 项目地址: https://gitcode.c…...
PCB过孔寄生电容的本质、影响与减小核心原理
在高速 PCB 设计领域,过孔虽小,却是影响信号完整性的关键 “咽喉”。其中,过孔寄生电容作为最普遍的寄生效应,在 GHz 级高频电路中会引发信号边沿劣化、阻抗不连续、时序偏移等一系列问题,成为制约高速系统性能的重要因…...
从零构建五子棋AI:C++实现中的博弈树搜索与剪枝优化
1. 五子棋AI的基本原理 五子棋是一种双人策略型棋类游戏,玩家通过在棋盘上交替落子,先形成五子连线的一方获胜。要让计算机学会下五子棋,我们需要教会它如何评估棋局并做出最佳决策。这就像教一个小朋友下棋,只不过我们用的是代码…...
终极GTA5模组菜单YimMenu:5分钟快速安装与完整功能指南
终极GTA5模组菜单YimMenu:5分钟快速安装与完整功能指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/Yim…...
终极指南:DeepSeek-OCR如何通过SAM+CLIP双编码器实现高精度文档识别
终极指南:DeepSeek-OCR如何通过SAMCLIP双编码器实现高精度文档识别 【免费下载链接】DeepSeek-OCR Contexts Optical Compression 项目地址: https://gitcode.com/gh_mirrors/de/DeepSeek-OCR DeepSeek-OCR是一款基于SAM(Segment Anything Model&…...
如何实现SQL复杂计算触发器原子性_利用触发器事务控制
是,触发器天然包含在主SQL事务中;其数据修改随主语句回滚,无需手动开启事务,但不可修改被主语句操作的同一张表。触发器里写复杂SQL计算,事务会自动包含吗会。只要触发器在支持事务的存储引擎(比如 InnoDB&…...
