Ejemplo n.º 1
0
        private void DownLoad(AutoUpdaterInfo info, bool redownLoad = false)
        {
            if (string.IsNullOrEmpty(info.DownloadUrl))
            {
                OnCompletedCallBack("下载文件无效", false);
                return;
            }
            var filename       = Path.GetFileName(info.DownloadUrl);
            var downloadFolder = CommonUnitity.GetDownLoadFolder();
            var fullname       = Path.Combine(downloadFolder, filename);
            var subFolderList  = Directory.EnumerateDirectories(downloadFolder);

            foreach (var tempFolder in subFolderList)
            {
                Directory.Delete(tempFolder, true);
            }
            if (File.Exists(fullname))
            {
                //如果已经存在该文件,且文件版本号和新文件版本号一致,那么直接跳过
                if (redownLoad)
                {
                    //要求重新下载
                    File.Delete(fullname);
                    CommonUnitity.ClearFolder(downloadFolder);
                }
                else
                {
                    //如果文件已经存在
                    if (DownloadProgressChanged != null)
                    {
                        DownloadProgressChanged(1, 1, 100);
                    }
                    Do(new DownloadUserToken()
                    {
                        Client = _webClient, FileName = fullname, ExcuteFileName = info.ExcuteFileName
                    });
                    return;
                }
            }
            _webClient.DownloadFileCompleted   += OnDownloadFileCompleted;
            _webClient.DownloadProgressChanged += OnDownloadProgressChanged;
            DownloadUserToken userToken = new DownloadUserToken()
            {
                Client = _webClient, FileName = fullname, ExcuteFileName = info.ExcuteFileName
            };

            _webClient.DownloadFileAsync(new Uri(info.DownloadUrl), fullname, userToken);
        }
Ejemplo n.º 2
0
        private void Do(DownloadUserToken args)
        {
            bool hasBackup     = false;
            var  baseDirectory = CommonUnitity.GetSystemBinUrl();
            var  backupdir     = CommonUnitity.GetBackupFolder();

            try
            {
                if (!File.Exists(args.FileName))
                {
                    _logger.Error("升级错误" + args.FileName);
                    OnCompletedCallBack("下载文件失败", false);
                    return;
                }
                //解压
                var unzipFolder          = CommonUnitity.GetUnzipFolder(args.FileName);
                var autoupdaterFiles     = Unzip(unzipFolder, args.FileName);
                var downloadBinDirectory = GetDownloadBinDirectory(autoupdaterFiles);
                CommonUnitity.ClearFolder(backupdir);
                hasBackup = true;
                //备份待升级文档
                Backup(backupdir, baseDirectory, downloadBinDirectory, autoupdaterFiles);
                //更新指定文件
                MoveToBaseDirectory(baseDirectory, downloadBinDirectory, autoupdaterFiles);
                var info = AutoUpdaterInfo.Current;
                info.Version = info.NewVersion;
                info.Save();
                //升级成功
                OnCompletedCallBack(string.Empty, true);
                Directory.Delete(unzipFolder, true);
            }
            catch (Exception ex)
            {
                if (hasBackup)
                {
                    Restore(backupdir, baseDirectory);
                }
                _logger.Error(ex, "升级错误" + args.FileName);
                OnCompletedCallBack(ex.Message, false);
                return;
            }
        }