C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级
C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级
3. CSFramework.AutoUpgrader自动升级程序添加参数【强制更新版本】,如下图:
扫一扫加微信
有种特殊场景:多个用户端正在使用系统过程中,管理员发布了新的升级包(发布新版本),并且要求客户端必须升级才能使用新功能,需要强制关闭程序进行升级。
本次功能升级适用的版本:
客户端界面强制升级提示:
基本实现:
1. 设计超时提示窗体:frmAutoUpgraderWaiting,
命名空间:CSFrameworkV5.Library.CommonForms.frmAutoUpgraderWaiting,如上图所示。
2. 在Program.cs 添加如下代码:
C# Code:
//启动自动检测最新升级包,强制升级定时器。
frmAutoUpgraderWaiting.StartAutoUpgrading(MdiTools.MainForm);
frmAutoUpgraderWaiting.StartAutoUpgrading(MdiTools.MainForm);
3. CSFramework.AutoUpgrader自动升级程序添加参数【强制更新版本】,如下图:
流程及原理
主程序通过.NET反射机制动态调用自动升级程序CSFramework.AutoUpgrader.UpgraderController类中的GetUpgraderPackages函数,返回最新的升级包数量,若数量>0,表示有新版本,立即启动超时提示窗体,超时完毕自动关闭程序。
用户重新运行程序,自动完成升级。
.NET反射跨程序集(跨域)调用指定方法:
C# Code:
/// <summary>
/// 自动升级程序.NET反射器
/// </summary>
public static class UpgraderReflection
{
/// <summary>
/// 获取升级包数据。通过.NET反射,调用升级程序的方法
/// </summary>
/// <returns></returns>
public static int GetPackages()
{
try
{
//获取本地最新升级包的版本号
VersionHistory v = VersionHistory.GetVersionHistory();
string newVersion = v == null ? "" : v.CurrentVersionID;
//价值升级程序的程序集
string file = Path.Combine(Application.StartupPath, "CSFramework.AutoUpgrader.exe");
byte[] bs = File.ReadAllBytes(file);
Assembly asm = Assembly.Load(bs);
//获取一个程序类型
Type T = asm.GetType("CSFramework.AutoUpgrader.UpgraderController");
object o = Activator.CreateInstance(T);
//反射一个方法
MethodInfo mi = T.GetMethod("GetUpgraderPackages");
object i = mi.Invoke(o, new object[] { "E81FFE4E-D0C5-430B-A558-9ECFC0F2FF0D", newVersion });
if (i == null)
return 0;
else
return Convert.ToInt32(i);
}
catch (Exception ex)
{
//Common.Msg.Warning("反射升级程序的GetPackages方法错误!\r\n" + ex.Message);
return 0;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 自动升级程序.NET反射器
/// </summary>
public static class UpgraderReflection
{
/// <summary>
/// 获取升级包数据。通过.NET反射,调用升级程序的方法
/// </summary>
/// <returns></returns>
public static int GetPackages()
{
try
{
//获取本地最新升级包的版本号
VersionHistory v = VersionHistory.GetVersionHistory();
string newVersion = v == null ? "" : v.CurrentVersionID;
//价值升级程序的程序集
string file = Path.Combine(Application.StartupPath, "CSFramework.AutoUpgrader.exe");
byte[] bs = File.ReadAllBytes(file);
Assembly asm = Assembly.Load(bs);
//获取一个程序类型
Type T = asm.GetType("CSFramework.AutoUpgrader.UpgraderController");
object o = Activator.CreateInstance(T);
//反射一个方法
MethodInfo mi = T.GetMethod("GetUpgraderPackages");
object i = mi.Invoke(o, new object[] { "E81FFE4E-D0C5-430B-A558-9ECFC0F2FF0D", newVersion });
if (i == null)
return 0;
else
return Convert.ToInt32(i);
}
catch (Exception ex)
{
//Common.Msg.Warning("反射升级程序的GetPackages方法错误!\r\n" + ex.Message);
return 0;
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网