项目概述
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