C# Winform软件版本自动升级 | 软件系统自动更新工具
C# Winform软件版本自动升级 | 软件系统自动更新工具
C/S系统自动升级软件帮助开发者将桌面管理软件升级到最新版本,可以轻松实现多渠道的同步更新,是进行存量用户更新的有效手段。使用自动更新程序后(即客户端已经部署升级程序以及集成了自动更新接口),当用户启动应用程序时,自动更新程序会将用户终端上的版本信息与服务器上开发者上传的升级包版本信息进行比较,如果服务器的版本更高,则会提示用户有新的版本更新,用户选择更新之后,则开始下载升级包,然后替换旧的版本。
产品特点:
自动升级检测:
VersionCheckNEW类的CheckUpgraderByDownloader方法:检查升级程序。
扫一扫加微信
C/S系统版本自动升级软件|软件自动升级工具 V1.0
适用软件:C/S系统、Winform桌面应用软件。
运行平台:Windows + .NET Framework 4.5
运行平台:Windows + .NET Framework 4.5
一、产品介绍
C/S系统自动升级软件帮助开发者将桌面管理软件升级到最新版本,可以轻松实现多渠道的同步更新,是进行存量用户更新的有效手段。使用自动更新程序后(即客户端已经部署升级程序以及集成了自动更新接口),当用户启动应用程序时,自动更新程序会将用户终端上的版本信息与服务器上开发者上传的升级包版本信息进行比较,如果服务器的版本更高,则会提示用户有新的版本更新,用户选择更新之后,则开始下载升级包,然后替换旧的版本。
产品特点:
1.以升级包方式自动升级,
2.可发布执行命令或独立程序的升级包,
3.产品开源,
4.成熟稳定!
C/S程序自动升级是一个很重要的功能,原理其实很简单,一般包含两个程序,一个是主程序,也就是除了升级功能以外的程序,另一个就是升级程序。在客户端程序启动时,先启动更新程序通过比较本地版本和服务端最新的版本信息判断是否有新版本,如果有可以直接下载,下载完成替换成功后并更新客户端版本信息,启动主程序。
升级程序本身也需要升级的,因此在运行主程序时首先检查升级程序,若有更新,下载替换本地的升级程序,然后再运行升级程序检查主程序的更新。
升级程序是由开发人员发布到服务器。
升级包由封包工具生成的,每个升级包对应唯一的版本号,升级包由多个文件组成,使用对象持久技术序列化为byte数据存储在数据库或保存为一个文件。
发布/下载升级包载逻辑结构图
发布/更新逻辑结构图
发布升级包:由系统开发人员、实施员或管理员发布升级包。
自动更新:运行客户端应用软件自动更新。
数据库下载策略
DB下载策略:不需要服务端支持,升级包存储在数据库,操作简单易于管理和维护。
系统配置文件(UpgraderClient.ini)
升级历史记录文件(version.xml),用于记录软件升级的历史数据,包括升级包的版本号、最新的版本号。
CurrentVersionID:本地最新的版本号,取版本号的最大值。
History:下载升级包的历史记录。
二、自动升级流程图 (Flow Chart)
C/S程序自动升级是一个很重要的功能,原理其实很简单,一般包含两个程序,一个是主程序,也就是除了升级功能以外的程序,另一个就是升级程序。在客户端程序启动时,先启动更新程序通过比较本地版本和服务端最新的版本信息判断是否有新版本,如果有可以直接下载,下载完成替换成功后并更新客户端版本信息,启动主程序。
升级程序本身也需要升级的,因此在运行主程序时首先检查升级程序,若有更新,下载替换本地的升级程序,然后再运行升级程序检查主程序的更新。
升级程序是由开发人员发布到服务器。
三、升级包(Upgrade Package)
升级包由封包工具生成的,每个升级包对应唯一的版本号,升级包由多个文件组成,使用对象持久技术序列化为byte数据存储在数据库或保存为一个文件。
发布/下载升级包载逻辑结构图
发布/更新逻辑结构图
发布升级包:由系统开发人员、实施员或管理员发布升级包。
自动更新:运行客户端应用软件自动更新。
四、升级策略接口说明
数据库下载策略
DB下载策略:不需要服务端支持,升级包存储在数据库,操作简单易于管理和维护。
五、系统文件说明
系统配置文件(UpgraderClient.ini)
升级历史记录文件(version.xml),用于记录软件升级的历史数据,包括升级包的版本号、最新的版本号。
CurrentVersionID:本地最新的版本号,取版本号的最大值。
History:下载升级包的历史记录。
六、解决方案 & 开发文档
七、C/S框架主程序调用版本自动升级程序
Program.cs文件,调用调用版本自动升级程序:
C# Code:
//系统配置:是否启动版本自动升级程序
if (SystemSettings.Current.CheckVersion)
{
bool exitApp = false;
VersionCheckNEW.AutoUpgrader(ref exitApp);
if (exitApp) return;//检测到新版本,退出程序
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
if (SystemSettings.Current.CheckVersion)
{
bool exitApp = false;
VersionCheckNEW.AutoUpgrader(ref exitApp);
if (exitApp) return;//检测到新版本,退出程序
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
自动升级检测:
C# Code:
/// <summary>
/// 自动升级
/// </summary>
public static void AutoUpgrader(ref bool exitApp)
{
//CSFramework.AutoUpgrader.exe
string file = Application.StartupPath + @"\" + DEF_UPGRADER_NAME;
//本地没有升级程序文件,不进行自我升级
if (!File.Exists(file)) return;
frmWaiting.ShowMe(null, "正在获取最新的升级程序.......");
VersionCheckNEW.CheckUpgraderByDownloader();
frmWaiting.ShowMe(null, "正在获取升级包.......");
VersionCheckNEW.CheckVersion(ref exitApp);
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 自动升级
/// </summary>
public static void AutoUpgrader(ref bool exitApp)
{
//CSFramework.AutoUpgrader.exe
string file = Application.StartupPath + @"\" + DEF_UPGRADER_NAME;
//本地没有升级程序文件,不进行自我升级
if (!File.Exists(file)) return;
frmWaiting.ShowMe(null, "正在获取最新的升级程序.......");
VersionCheckNEW.CheckUpgraderByDownloader();
frmWaiting.ShowMe(null, "正在获取升级包.......");
VersionCheckNEW.CheckVersion(ref exitApp);
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
C# Code:
/// <summary>
/// 检查版本升级程序,有新版本自动下载
/// </summary>
/// <returns>True:有新版本, False:无新版本</returns>
public static bool CheckUpgraderByDownloader()
{
string upgraderPath = Application.StartupPath + @"\" + DEF_UPGRADER_NAME;
string serverVer = "";
try
{
//获取升级程序的程序集
byte[] fileData = File.ReadAllBytes(upgraderPath);
Assembly upgrader = Assembly.Load(fileData);
//通过.NET反射机制创建UpgraderController实例
Type t = upgrader.GetType(DEF_UPGRADER_CONTROLLER);
object o = t.Assembly.CreateInstance(t.FullName);
MethodInfo M = t.GetMethod("DownloadUpgrader");
//调用DownloadUpgrader方法
//参数名:destPath,传值:upgraderPath==Application.StartupPath
object r = M.Invoke(o, new object[] { upgraderPath });
serverVer = r.ToString();
if (serverVer != "")//有新版本,保存配置文件
{
IniFile ini = new IniFile(Application.StartupPath + @"\" + UpgraderINIFile);
ini.IniWriteValue("Setup", "UpgraderFileVersion", serverVer.ToString());//写入版本号
}
}
catch (Exception ex)
{
LogUserOperate.Write(ex);
Msg.Warning("检查升级程序失败!\r\n" + ex.Message);
}
return serverVer != "";
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// <summary>
/// 检查版本升级程序,有新版本自动下载
/// </summary>
/// <returns>True:有新版本, False:无新版本</returns>
public static bool CheckUpgraderByDownloader()
{
string upgraderPath = Application.StartupPath + @"\" + DEF_UPGRADER_NAME;
string serverVer = "";
try
{
//获取升级程序的程序集
byte[] fileData = File.ReadAllBytes(upgraderPath);
Assembly upgrader = Assembly.Load(fileData);
//通过.NET反射机制创建UpgraderController实例
Type t = upgrader.GetType(DEF_UPGRADER_CONTROLLER);
object o = t.Assembly.CreateInstance(t.FullName);
MethodInfo M = t.GetMethod("DownloadUpgrader");
//调用DownloadUpgrader方法
//参数名:destPath,传值:upgraderPath==Application.StartupPath
object r = M.Invoke(o, new object[] { upgraderPath });
serverVer = r.ToString();
if (serverVer != "")//有新版本,保存配置文件
{
IniFile ini = new IniFile(Application.StartupPath + @"\" + UpgraderINIFile);
ini.IniWriteValue("Setup", "UpgraderFileVersion", serverVer.ToString());//写入版本号
}
}
catch (Exception ex)
{
LogUserOperate.Write(ex);
Msg.Warning("检查升级程序失败!\r\n" + ex.Message);
}
return serverVer != "";
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网