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); }
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; } }