×

一款基于 .NET WinForm 开发的 Windows 自动检查更新程序

独孤求败 独孤求败 发表于2026-03-27 10:04:25 浏览45 评论0

抢沙发发表评论

项目概述

CheckUpdate.Net 是一个基于 .NET WinForm 开发的 Windows 自动检查更新程序,同时支持 WinForm/WPF 应用程序。它主要用于帮助开发者实现应用程序的自动更新功能,包括更新文件、更新程序自身以及下载安装包等。

应用场景

CheckUpdate.Net 适用于需要定期更新或维护的 Windows 应用程序,特别是那些需要向用户提供持续功能改进和错误修复的软件产品。通过集成 CheckUpdate.Net,开发者可以轻松实现以下场景:

  • 自动更新应用程序:当检测到服务器上有新版本时,自动下载并安装更新。
  • 文件更新:更新应用程序中的特定文件,无需重新安装整个应用程序。
  • 安装包下载:提供新版本的完整安装包下载链接,方便用户重新安装或分享。

功能模块

更新管理模块

  • 文件更新:支持单个或多个文件的更新,通过读取服务端 XML 配置文件获取需要更新的文件列表。
  • 程序更新:支持更新应用程序自身,通过配置本地 XML 文件指定更新程序的目录。
  • MD5 校验:新增本地 MD5 文件与 XML 文件中的 MD5 值比较,避免重复下载相同文件。

服务端配置模块

  • 七牛云集成:服务端程序依赖七牛云存储,通过七牛云 CDN 网络加速文件下载。
  • 配置管理:提供服务端配置界面,方便用户填写七牛云相关信息和配置文件列表。

客户端集成模块

  • 代码集成:提供简单的代码示例,方便开发者在主程序中集成检查更新功能。
  • 事件处理:支持自定义更新提醒弹窗和强制更新逻辑,通过委托实现点击下次提醒按钮的操作。

功能特点

  • 兼容性强:在 .NET Framework 2.0 下开发,兼容 Windows XP 及以上操作系统。
  • 灵活配置:通过 XML 配置文件管理更新文件和程序,方便灵活。
  • 高效下载:利用七牛云 CDN 网络加速下载,提高更新速度。
  • 节省流量:通过 MD5 校验避免重复下载相同文件,节省用户流量。
  • 用户友好:提供更新提醒弹窗,支持强制更新和下次提醒选项。

Winform 代码实现

    //默认的LoginView为登陆窗体
    ApplicationContext context = new ApplicationContext(new LoginView());
    //发现设定的目录存在新的更新程序,进行剪切到根目录
    VersionHelper.CutNewUpdateEXE();

    //检查是否需要下载安装包,不需要下载返回False
    if (!VersionHelper.GetNewVersionToDownloadSetup())
    {
        //检查版本更新
        if (VersionHelper.IsRequiredUpdate())
        {
            string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
            if (File.Exists(xmlPath))
            {
                //加载XML路径
                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
                {
                    //执行xxx
                };
                context = new ApplicationContext(form);
            }
        }
    }
    
    //do something
     Application.Run(context); 

WPF 代码实现

[STAThread]
static void Main()
{
    //发现设定的目录存在新的更新程序,进行剪切到根目录
    VersionHelper.CutNewUpdateEXE();

    //检查是否需要下载安装包,不需要下载返回False
    if (!VersionHelper.GetNewVersionToDownloadSetup())
    {
        //检查版本更新
        if (VersionHelper.IsRequiredUpdate())
        {
            string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
            if (File.Exists(xmlPath))
            {
                //加载XML路径
                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
                {
                    //执行xxx
                };
                //这里启动PromptingForm窗体
                form.ShowDialog();
            }
        }
    }
    //不需要更新时,默认启动登陆窗体
    else
    {
        LoginView view = new LoginView();
        view.ShowDialog();
    }
}

功能演示

图片

源码地址

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


群贤毕至

访客