C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级
作者:作者不详  发布日期:2020/05/02 22:28:27
  C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级

C/S框架新功能:自动检测升级包并强制关闭应用程序进行版本升级


有种特殊场景:多个用户端正在使用系统过程中,管理员发布了新的升级包(发布新版本),并且要求客户端必须升级才能使用新功能,需要强制关闭程序进行升级。


本次功能升级适用的版本:






客户端界面强制升级提示:


贴图图片-强制系统升级


基本实现:


1. 设计超时提示窗体:frmAutoUpgraderWaiting,
命名空间:CSFrameworkV5.Library.CommonForms.frmAutoUpgraderWaiting,如上图所示。


2. 在Program.cs 添加如下代码:

C# Code:

//启动自动检测最新升级包,强制升级定时器。
frmAutoUpgraderWaiting.StartAutoUpgrading(MdiTools.MainForm);




3. CSFramework.AutoUpgrader自动升级程序添加参数【强制更新版本】,如下图:


贴图图片-强制系统升级1


流程及原理

主程序通过.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





C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇