基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件)

我们来看一下代码

复制代码
        
        //升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的)
        private UpgradeConfig upgradeConfig = null;
        //客户端存储升级配置文件的地址  是放在客户端根目录下的  (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置)
        string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeConfig.xml";

        //启动升级程序
        private void AppUpdate()
        {
            //UpgradeConfig 这个类存储返回的信息  也就是说服务器端返回来的是 UpgradeConfig类型的信息
            //Test 是个文本类型的信息  是客户端发给服务器的
            //其实在这里 "Test"这个值传递到服务器端后,服务器并没有使用,但是按照networkcomms的用法,又好像必须发送个信息,所以随便写个字符就行
            //<string,UpgradeConfig>这里 string 代表发送到服务器的信息是string类型的
 
            //发送一个逻辑类型是"GetUpMsg"的string类型的,具体内容为Test的信息给服务器,服务器收到"GetUpMsg"逻辑类型,会根据逻辑类型找到相应的处理方法,并返回一个UpgradeConfig类型的信息给客户端
            //upgradeConfig获取的就是从服务器端返回来的消息,通讯框架帮我们接收到了返回的消息,隐藏了具体过程,我们使用起来就像调用本地方法一样
            UpgradeConfig upgradeConifg = newTcpConnection.SendReceiveObject<string, UpgradeConfig>("GetUpMsg", "ResUpMsg", 5000, "Test");

            //如果服务器返回的版本号大于本机的版本号
           //GetUpgradeVersion()方法用于获取本地配置文件中的版本号

            if (upgradeConifg.AppVersion > GetUpgradeVersion())
            {
                //从配置文件中获取升级文件的名称,我们升级时,一般关闭当前程序,另外启动一个程序进行升级
                string upgradeAppPath = System.Configuration.ConfigurationManager.AppSettings["UpgradeApp"];

                string callBack = AppDomain.CurrentDomain.BaseDirectory + upgradeAppPath;


                if (File.Exists(callBack))
                {
                    //可以进行内网外网环境判断  
                    //如果内网 此处假设为内网
                    if (true)
                    {
                        //启动升级程序
                        System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack);
                    }
                    //如果外网  加一个启动参数
                    else
                    {

                        System.Diagnostics.Process process = System.Diagnostics.Process.Start(callBack, "s");
                    }
                }
                else
                {
                    MessageBox.Show("目标程序不存在" + callBack);
                }

                this.Close();
                this.Dispose();
            }
        }
         
复制代码

我们看一下服务器端相应的处理

1:客户端定义了"GetUpMsg"逻辑类型,在服务器端要设定一下

可以在构造函数中添加

   //返回更新文件信息<5>
            NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetUpMsg", IncomingReqUpMsg);

这样的话,服务器端收到信息后,首先找出其逻辑类型,这里是 GetUpMsg,再根据逻辑类型,找到处理方法,这里是IncomingReqUpMsg

 

复制代码
   
        private UpgradeConfig upgradeConfig = null;
           private string UPConfigFilePath = AppDomain.CurrentDomain.BaseDirectory + "UpgradeFile\\UpgradeConfig.xml";
         //处理方法中参数为3个,只是统一的格式
         //  PacketHeader 消息头,Connnection 客户端相对应的连接,处理的消息的类型 这里是string
        private void IncomingReqUpMsg(PacketHeader header, Connection connection, string msg)
        {
            try
            {
                //如果配置文件不存在,创建一个空的
                if (!File.Exists(UPConfigFilePath))
                {
                    upgradeConfig = new UpgradeConfig();
                    upgradeConfig.Save(UPConfigFilePath);
                }
                else
                {
                    //存在,则加载配置文件到upgradeConfig类中
                    upgradeConfig = UpgradeConfig.LoadConfig(UPConfigFilePath);
                }
                //把服务器端的升级配置文件发给客户端 返回的消息类型是UpgradeConfig 类型需要与客户端中设定的返回类型一致  客户端收到后比较版本号
                connection.SendObject("ResUpMsg", upgradeConfig);
            }
            catch (Exception ex)
            {
                LogTools.LogException(ex, "IncomingReqUpMsg");
            }
        }
复制代码

 

客户端收到UpgradeConfig类后,进行判断,如果需要升级,启动升级程序,然后升级程序会请求下载文件

www.networkcomms.cn

www.cnblogs.com/networkcomms 编辑

【开源下载】基于TCP网络通信的自动升级程序c#源码

[源码下载]Demo2.模拟简单登陆-效果图 基于networkcomms2.3.1

[源码下载]Demo1 客户端从服务器获取信息(基于networkcomms2.3.1)

 

相关文章:

基于TCP网络通信的自动升级程序源码分析--生成升级文件相关的配置文件

基于TCP网络通信的自动升级程序源码分析-客户端连接服务器

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

基于TCP网络通信的自动升级程序源码分析-启动升级文件下载程序

基于TCP网络通信的自动升级程序源码分析-服务器发送文件

基于TCP网络通信的自动升级程序源码分析-客户端接收文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SimpAutoUpdater c#自动升级 模块源码 可以集成到自己程序: 首先在VS为当前的主程序项目添加引用,引用“客户端的“SimpleUpdater.exe”。 在VS,点开“解决方案管理器”相应项目的“属性”节点,打开 AssemblyInfo.cs 文件,在最下面添加上一行自动更新声明: //--添加这行标记表示支持自动更新, 后面的网址为自动更新的根目录. [assembly: FSLib.App.SimpleUpdater.Updateable("http://ls.com/update.xml")] 这步是必须的,否则请求检查更新时会抛出异常;代码的网址即上面提到的能访问到xml文件的网址。 如果您希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明: 使用 FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple("升级网址") 的重载方法。这个重载方法允许你传入一个升级包的地址; 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。 无论使用哪种方式,请确保在检查更新前,地址已经设置。 到这里,准备工作即告完成,为代码添加上检查更新的操作即可。 static class Program { /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var updater = FSLib.App.SimpleUpdater.Updater.Instance; //当检查发生错误时,这个事件会触发 updater.Error += new EventHandler(updater_Error); //没有找到更新的事件 updater.NoUpdatesFound += new EventHandler(updater_NoUpdatesFound); //找到更新的事件.但在此实例,找到更新会自动进行处理,所以这里并不需要操作 //updater.UpdatesFound += new EventHandler(updater_UpdatesFound); //开始检查更新-这是最简单的模式.请现在 assemblyInfo.cs 配置更新地址,参见对应的文件. FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple(); /* * 如果您希望更加简单的使用而不用去加这样的属性,或者您想程序运行的时候自定义,您可以通过下列方式的任何一种方式取代上面的属性声明: * 使用Updater.CheckUpdateSimple 的重载方法。这个重载方法允许你传入一个升级包的地址; * 在检查前手动设置 FSLib.App.SimpleUpdater.Updater.UpdateUrl 属性。这是一个静态属性,也就是说,您并不需要创建 FSLib.App.SimpleUpdater.Updater.UpdateUrl 的对象实例就可以修改它。 */ FSLib.App.SimpleUpdater.Updater.CheckUpdateSimple("升级网址"); Application.Run(new Form1()); } static void updater_UpdatesFound(object sender, EventArgs e) { } static void updater_NoUpdatesFound(object sender, EventArgs e) { System.Windows.Forms.MessageBox.Show("没有找到更新"); } static void updater_Error(object sender, EventArgs e) { var updater = sender as FSLib.App.SimpleUpdater.Updater; System.Windows.Forms.MessageBox.Show(updater.Exception.ToString()); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值