Esempio n. 1
0
        /// <summary>
        /// 开始更新任务
        /// </summary>
        #region public void startUpdate()
        public void startUpdate()
        {
            //检查版本是否更新
            for (int i = 0; i < 10; i++)//如果不成功,重复查询十次
            {
                //重复十次查询,没有结果,结束本次更新
                if (i >= 10)
                {
                    Logger.warn(typeof(UpdateController), "check app version for 10 times, can not get anything.");
                    return;
                }
                //记录返回的查询结果
                String path, name;
                bool   isUpdate = update.checkVersion(out path, out name);
                //查询结果判断
                if (!isUpdate)
                {
                    Logger.warn(typeof(UpdateController), "the app has not been update in server.");
                    return;
                }
                if (String.IsNullOrEmpty(path) || String.IsNullOrEmpty(name))
                {
                    Logger.warn(typeof(UpdateController), "update client has find updated version in server, but some error occured unknown.");
                    continue;
                }
                serverName = name;
                serverPath = path;
                break;
            }

            //进行十次下载文件操作,十次以后文件下载如果不成功,则结束本次更新
            for (var i = 0; i < 10; i++)
            {
                //查询次数大于十次,结束更新
                if (i > 9)
                {
                    Logger.warn(typeof(UpdateController), "download file over 10 times, but still failed,please check if network is avaliable."); return;
                }
                //获取本地文件大小
                long size = update.checkFileExist(serverName);
                //开始下载
                bool isDownload = update.downloadFile(serverPath, serverName, size);
                //判断是否下载成功
                if (!isDownload)
                {
                    Logger.warn(typeof(UpdateController), "down load file error. try again.");
                    continue;//下载不成功继续下载
                }
                //下载成功校验sha256值是否正确
                String localHash  = CommonUtils.getFileSHA256(serverName);
                String serverHash = update.getHashFromServer(serverName);
                if (String.IsNullOrEmpty(localHash) || String.IsNullOrEmpty(serverHash) || !localHash.Equals(serverHash))
                {
                    Logger.warn(typeof(UpdateController), "download file has been destroyed.delete it and try download again");
                    CommonUtils.deleteFile(serverName);
                    continue;
                }
                Logger.info(typeof(UpdateController), "download file success.");
                break;
            }

            //备份本地数据,十次备份不成功,退出更新
            for (var i = 0; i < 10; i++)
            {
                if (i > 9)//备份次数大于10,结束备份
                {
                    Logger.warn(typeof(UpdateController), "back up local app info error.");
                    return;
                }
                String appPath;//记录主程序的运行路径
                //开始备份数据
                bool isBack = update.backLocalAppInfo(out appPath);
                if (!isBack)//备份失败
                {
                    Logger.warn(typeof(UpdateController), "back up local app info error.try again");
                    continue;
                }
                //备份成功
                Logger.info(typeof(UpdateController), "back up local app info success.");
                installPath = appPath;
                break;
            }

            //安装更新包
            update.installApp(installPath, serverName);
        }