首页 > 其他分享 >终端设备自动更新

终端设备自动更新

时间:2023-07-04 16:34:15浏览次数:24  
标签:string iniFile System 终端设备 USER 自动更新 new IniReadValue

一、做设备当多台的时候最好做自动更新的控件,每一次通过服务器上传和下载,下面提供一下自动更新思路。

1、提供一个检测是否需要自动更新的接口,传入版本和设备类型,检测是否需要更新。

2、提供一个下载安装包的接口,传入要下载的版本号和设备类型,post下载。下载完成后安装启动即可。

 

 

        ///======================【流程】=========================
        //1、判断是否需要更新
        /// <summary>判断是否需要更新</summary>
        /// <param name="statusCode">状态码</param>
        /// <param name="newVersion">新的版本号</param>
        /// <param name="size">安装包大小</param>
        /// <returns>是否需要更新</returns>
        public     bool isNeedUpdate(out string statusCode, out string newVersion, out string nowVersion, out string exe, out string stepFile)
        {
            try
            {
                exe = "";
                nowVersion = "";
                newVersion = "";
                stepFile = "";
                statusCode = "";
                filePath =  "";
                urlfile = "";
                string reslut = "";
                iniFile = new IniFile(FTP.getBasePath() + "\\ini\\Version.ini");
                iniFile2 = new IniFile(FTP.getBasePath() + "\\Config.ini");
                Log.WriteLogJson("isNeedUpdate", "开始");

                string url = iniFile.IniReadValue("USER", "ip") + "/autoUpdate/api/autoUpdateCheck/isLatestVersion";
                string equipmentNo = iniFile2.IniReadValue("SET", "DeviceId").Trim();

                nowVersion = iniFile.IniReadValue("USER", "versionNo");
                exe = FTP.getBasePath() + iniFile.IniReadValue("USER", "name");

                Log.WriteLogJson("isNeedUpdate", equipmentNo);
                Dictionary<String, String> jobFailId = new Dictionary<string, string>();
                jobFailId.Add("apkClass", iniFile.IniReadValue("USER", "appType"));
                jobFailId.Add("build", iniFile.IniReadValue("USER", "versionNo"));
                jobFailId.Add("equipmentNo", equipmentNo);
                url = getUrl(url, jobFailId);
                Log.WriteLogJson("isNeedUpdate", url);
               
                HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url);
                wbRequest.Proxy = null;
                wbRequest.Method = "GET";
                HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();
                using (Stream responseStream = wbResponse.GetResponseStream())
                {
                    using (StreamReader sReader = new StreamReader(responseStream))
                    {
                       reslut = sReader.ReadToEnd();
                        Log.WriteLogJson("isNeedUpdate", reslut);
                    }
                }
                if(string.IsNullOrEmpty(reslut))
                {
                    return false;
                }
                if(reslut.Contains("暂无最新版本更新"))
                {
                    return false;
                }
                //解析
              var  mJson = JsonConvert.DeserializeObject<isLatestVersionRq>(reslut);

                if(mJson.code!=0)
                {
                    return false;
                }

                statusCode= mJson.code.ToString();
                newVersion = mJson.data.build;
                urlfile = mJson.data.url.ToString();
                string appType2 = iniFile.IniReadValue("USER", "appType").Trim();//终端类型

                filePath = FTP.getBasePath() + "SCQS_" + newVersion + ".exe";
                stepFile = filePath;
                string size = mJson.data.apkSize.ToString();
                fileSize = ulong.Parse(size);
      
                build = newVersion;
                nowVersion = iniFile.IniReadValue("USER", "versionNo").ToString();
                Log.WriteLogJson("isNeedUpdate","最新版本号:"+  newVersion);
                if (Convert.ToInt32(nowVersion) < Convert.ToInt32(newVersion))
                {
                    Log.WriteLogJson("isNeedUpdate", "需要更新" );
                    return true;
                }
                else
                    return false;
              
            }
            catch(Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


        /// <summary>2、下载安装包</summary>
        public void downloadPack()
        {
            try
            {


                int all_count = 0;
                sc.start();
                process = 0;
                System.String result = System.String.Empty;
        
                HttpWebRequest Myrq = WebRequest.Create(urlfile) as HttpWebRequest;
             
                HttpWebResponse myrp = Myrq.GetResponse() as HttpWebResponse;
                System.IO.Stream st = myrp.GetResponseStream();
                System.IO.Stream so = new System.IO.FileStream(filePath, System.IO.FileMode.Create);
                System.Byte[] by = new System.Byte[1024 * 10];
                System.Int32 osize = st.Read(by, 0, (System.Int32)by.Length);
                process = 0.2f;
                while (osize > 0)
                {
                    so.Write(by, 0, osize);
                    all_count += osize;
                    sc.setSize(all_count);
                    writeCount += (ulong)osize;
                    process = (float)writeCount / (float)fileSize;
                    osize = st.Read(by, 0, (System.Int32)by.Length);
                  
                }
     
                so.Close();
                st.Close();
                myrp.Close();
                Myrq.Abort();
           
                isFinish = true;
                sc.stop();


   
              
              
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

 

 

 

标签:string,iniFile,System,终端设备,USER,自动更新,new,IniReadValue
From: https://www.cnblogs.com/NangFah/p/17526103.html

相关文章

  • 微信小程序配置自动更新,微信小程序自动升级
    我们开发完小程序,发布新版本之后,用户如果想体验新版本,需要把小程序从使用列表删除,在重新搜索之后,再次打开,新的版本才会生效。但是, 随着我们更新次数的增加,这种方式就很不友好,用户体验下降,所以在开发中,我们就要考虑配置小程序自动更新。首先,我们需要了解下小程序的运行机制,小程序......
  • mybatis-plus框架配合数据库表时间字段自动更新问题
    背景在项目开发前的设计阶段,我们会根据需求分析、业务梳理的结果进行领域建模。通常有2种方式:实体设计优先数据库设计优先无论哪种方式,最终会创建数据库、数据表。通常在每一张表,会设计2个时间自动,创建时间和修改时间,这样在查询数据时能够清晰的看到数据行是什么时候创建......
  • C# Winform通用开发框架,支持多语言,多数据库,自动更新,模块化
    C#Winform通用开发框架,支持多语言,多数据库,自动更新,模块化,可用其开发任意CS端系统,非常适合需要快速搭建项目的团队或个人使用。原创文章,转载请说明出处,资料来源:http://imgcs.cn/5c/661496079150.html......
  • 部署PHP+Swoole实现自动更新项目的GitHub Webhooks
    前言在项目开发过程中,每次需要手动登录服务器并执行gitpull命令来更新代码,这样非常繁琐和耗时。为了简化这个过程,我们可以利用GitHub的Webhooks功能,结合PHP和Swoole来编写一个自动更新项目的接口脚本。实现步骤以下是实现自动更新项目的GitHubWebhooks的步骤:首先,你得有一个......
  • JPA在事务结束时自动更新查询数据
    目录现象产生的原因解决方法现象最近解决了一个困惑几天的bug,数据库里的某一些记录莫名其妙的被刷新了,排查过代码跟应用日志,可以确定不是代码执行的更新。直到今天看到了一条日志,在事务提交时报错“Column'user_name'cannotbenull”,在出错的事务中,针对这一个表只会执行query......
  • 永久关闭windows10自动更新
    1、禁用WindowsUpdate服务打开服务:services.mscWindowsUpdate禁用切换到“恢复”选项,都改为无操作2、通过组策略进行Win10自动更新相关服务关闭打开组策略 gpedit.msc依次选择:计算机配置->管理模板->Windows组件->Windows更新。设置为已禁用计算机配置->管理......
  • Windows10关闭自动更新
    1.组策略编辑器禁用Windows更新Win键+R,输入gpedit.msc,启动组策略编辑器。左侧选择[本地计算机配置]->[管理模板]->[Windows组件]->[Windows更新],禁用有右侧的[配置自动更新]和[启用通过自动更新建议的更新]选项。2.停用BOTS服务BITS服务的英文全称为BackgroundInteIIigentT......
  • 彻底关闭Win10自动更新
    彻底关闭Win10自动更新  尽管Win11已经发布了一段时间,但目前互联网上大部分电脑用户所使用的的操作系统仍是Win10,对于Win10,笔者相信大部分人应该都不陌生,作为目前市面上占比最高的电脑系统,Win10的许多功能和操作逻辑都十分优秀,不过有优秀的地方必然也有糟糕的缺点,其中......
  • 彻底关闭Win10自动更新
    一、禁用WindowsUpdate服务1、同时按下键盘Win+R,打开运行对话框,然后输入命令services.msc,点击下方的“确定”打开服务。2、找到WindowsUpdate这一项,并双击打开。3、双击打开它,点击“停止”,把启动类型选为“禁用”,最后点击应用。4、接下再切换到“恢复”选项,......
  • 【.NET源码解读】Configuration组件及自动更新
    Configuration组件是.NET中一个核心的、非常重要的组件。它提供了一种方便的机制,用于从配置文件、环境变量、命令行参数等各种数据源中读取和配置应用程序,以满足不同环境下应用程序的需求。在本篇文章中,将会介绍Configuration的基本用法,并通过源码探究.NET中Configuration的实现......