首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CheckUpdate.Net:.NET 客户端自动更新框架

CheckUpdate.Net:.NET 客户端自动更新框架

作者头像
郑子铭
发布2025-07-26 10:42:22
发布2025-07-26 10:42:22
2370
举报

CheckUpdate.Net 是一个轻量级的 .NET 客户端自动更新框架,适用于 C/S 架构的桌面应用程序。

它通过访问远程服务器(目前基于 七牛云存储)获取更新信息,并下载新版本文件进行更新。相比传统的 IIS 部署方式,利用七牛云 CDN 可显著提升下载速度,且提供每月 10GB 免费流量。

该项目最初是为了解决小型项目中无合适自动更新组件的问题而开发,兼容 .NET Framework 2.0+,适合 Windows XP 及以上系统部署。

核心功能

✅ 支持单个或多个文件更新 ✅ 自动比对本地与服务端文件 MD5,避免重复下载 ✅ 支持更新更新程序本身 ✅ 利用七牛云 CDN 加速下载 ✅ 提供 WinForm 和 WPF 集成方案 ✅ 弹窗提示更新内容,支持强制更新逻辑

系统架构与原理

CheckUpdate.Net 的工作流程如下:

  1. 1. 客户端从指定路径加载 UpdateFile.xml 文件。
  2. 2. 对比 XML 中定义的版本号与本地当前版本。
  3. 3. 若有更新,则根据 XML 描述下载对应文件。
  4. 4. 下载完成后替换旧文件并更新版本信息。
  5. 5. 如果更新程序本身有变化,会在下一次启动时生效。

主要组成文件:

文件名

作用

UpdateFileClient.exe

更新主程序

UpdateFileCommon.dll

核心逻辑封装

UpdateFile.xml

更新配置清单

UpdateFileClient.exe.config

配置文件(可选)


服务端配置指南

使用 UpdateFileServerToQiNiu.exe 工具上传并管理更新包,依赖 七牛云对象存储

操作步骤:

  1. 1. 登录七牛云控制台,创建存储空间并绑定自定义域名。
  2. 2. 设置响应头 Access-Control-Allow-Methods: *,以支持跨域请求。
  3. 3. 获取密钥信息(密钥管理页面)。
  4. 4. 打开 UpdateFileServerToQiNiu.exe,填写七牛云配置。
  5. 5. 添加需要发布的文件列表,并生成 UpdateFile.xml

客户端使用方式

准备工作

  • • 将以下文件放入主程序运行目录:
    • UpdateFileClient.exe
    • UpdateFile.xml
    • UpdateFileCommon.dll
    • • (可选)UpdateFileClient.exe.config

⚠️ 注意:如果主程序使用 .NET Framework 4.0+,需保留 config 文件;如使用 .NET 2.0,请删除该文件。


本地 XML 配置说明

代码语言:javascript
复制
<UpdateConfig>
    <Version>1</Version> <!-- 当前版本 -->
    <ReleaseNote>修复了若干BUG</ReleaseNote> <!-- 更新日志 -->
    <IsMustUpdate>true</IsMustUpdate> <!-- 是否强制更新 -->
    <Files>
        <File Name="MainApp.exe" Md5="xxx" />
        <File Name="Library.dll" Md5="yyy" />
    </Files>
</UpdateConfig>

实现更新程序自身更新

在主程序中添加以下代码,用于检测临时目录中的新版更新器:

代码语言:javascript
复制
using UpdateFileCommon;

// 检查是否有新版本更新器,若有则剪切到主目录
VersionHelper.CutNewUpdateEXE();

WinForm / WPF 集成示例

WinForm 启动流程

代码语言:javascript
复制
using System;
using System.Windows.Forms;
using System.Xml;

namespaceYourAppNamespace
{
    staticclassProgram
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // 检查并更新更新器
            VersionHelper.CutNewUpdateEXE();

            // 检查是否需要下载安装包
            if (!VersionHelper.GetNewVersionToDownloadSetup())
            {
                // 检查是否需要更新
                if (VersionHelper.IsRequiredUpdate())
                {
                    string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
                    if (File.Exists(xmlPath))
                    {
                        XmlDocument doc = new XmlDocument();
                        doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));

                        var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
                        var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);

                        PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
                        form.NextShowEvent += () => {
                            // 点击“下次提醒”执行的操作
                        };

                        Application.Run(form);
                        return;
                    }
                }
            }

            // 正常启动主界面
            Application.Run(new LoginView());
        }
    }
}

WPF 集成说明

WPF 项目需手动添加 Program.cs 并设置为主启动类:

代码语言:javascript
复制
[STAThread]
public static void Main()
{
    VersionHelper.CutNewUpdateEXE();

    if (!VersionHelper.GetNewVersionToDownloadSetup())
    {
        if (VersionHelper.IsRequiredUpdate())
        {
            string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
            if (File.Exists(xmlPath))
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));
                var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
                var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);

                PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
                form.NextShowEvent += delegate { /* 处理点击事件 */ };
                form.ShowDialog();
            }
        }
    }

    // 启动主窗口
    App app = new App();
    app.InitializeComponent();
    app.Run(new MainWindow());
}

项目地址

Gitee: https://gitee.com/xcong/CheckUpdate.Net


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心功能
  • 系统架构与原理
    • 主要组成文件:
  • 服务端配置指南
    • 操作步骤:
  • 客户端使用方式
    • 准备工作
    • 本地 XML 配置说明
  • 实现更新程序自身更新
  • WinForm / WPF 集成示例
    • WinForm 启动流程
    • WPF 集成说明
  • 项目地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档