记录WinFrom 使用 Autoupdater.NET.Official 进行软件升级更新

开源地址:https://github.com/ravibpatel/AutoUpdater.NET

使用Autoupdater.NET.Official 更新软件版本 关键代码 (此升级关键代码从互联网上获取到,进行调整后变成如下:)

复制代码
 public static void Start(string serverPath, ISynchronizeInvoke synchronizeInvoke)
 {
     AutoUpdater.Start(serverPath, Assembly.GetExecutingAssembly());

     #region 

     System.Timers.Timer timer = new System.Timers.Timer
     {
         Interval = 2 * 60 * 1000,
         SynchronizingObject = synchronizeInvoke
     };
     timer.Elapsed += delegate
     {
         AutoUpdater.Start(serverPath, Assembly.GetExecutingAssembly());
     };
     timer.Start();

     #endregion

     //若您不想在更新表单上显示"跳过"按钮,那个么只需在上面的代码中添加以下行即可。
     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中的版本则触发CheckForUpdateEvent
     AutoUpdater.CheckForUpdateEvent += (args) => {
         if (args.Error == null)
         {
             //检测到有可用的更新
             if (args.IsUpdateAvailable)
             {
                 DialogResult dialogResult;
                 if (args.Mandatory.Value)
                 {
                     dialogResult =
                         MessageBox.Show(
                             $@"发现新版本V{args.CurrentVersion}.当前版本V{args.InstalledVersion}.点击确认开始更新", @"新版更新",
                             MessageBoxButtons.OK,
                             MessageBoxIcon.Information);
                 }
                 else
                 {
                     dialogResult =
                         MessageBox.Show(
                             $@"发现新版本V{args.CurrentVersion}.当前版本V{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
         {
             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);
             }
         }
     };
 }

配置升级xml,创建AutoUpdater.xml 文件,添加以下配置

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<item>
    <version>1.0.0.1</version>
    <url>http://localhost:8085/BatchCopyData.exe</url>
    <changelog>http://localhost:8085/AutoUpdaterLoger.html</changelog>
    <mandatory>false</mandatory>
</item>
相关推荐
兰令水18 分钟前
leecodecode【面试150】【2026.6.14打卡-java版本】
java·算法·面试
小满Autumn3 小时前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net
JustHappy6 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
snow@li6 小时前
SEO-文章标题:写文章时候,分类+主标题+大纲+解释 作为标题 / 不点进去也知道全文覆盖什么 / 标题即架构
前端
yaoxin5211237 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
kyriewen7 小时前
Git Commit 前自动修复代码风格?配置 Husky + lint-staged,从此 CR 只聊逻辑
前端·git·面试
何极光8 小时前
IDEA集成Maven
java·maven·intellij-idea
小和尚同志8 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc
程序员二叉8 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉8 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc