/// <summary> /// 下载更新包并且更新文件 /// </summary> /// <param name="updateInfo"></param> /// <param name="callback"></param> public static void Update(UpdateInfo updateInfo, UpdateProcessChangedHandler callback) { var filename = Path.Combine(Application.StartupPath, string.Format("ColorWanted-{0}.tmp.exe", updateInfo.Version)); var data = new UpdateProcessChangedData(); try { using (var web = new WebClient()) { data.Success = true; web.DownloadFileCompleted += (sender, e) => { // 校验文件长度 if (data.TotalBytesToReceive != updateInfo.FileSize) { data.Success = false; callback.Invoke(data); return; } // 校验文件 sha if (!updateInfo.Sha.Equals(Util.HashFile(filename), StringComparison.OrdinalIgnoreCase)) { data.Success = false; callback.Invoke(data); return; } Thread.Sleep(2000); Process.Start(filename, string.Format(@"/update 1 ""{0}""", Application.ExecutablePath)); Environment.Exit(0); }; web.DownloadProgressChanged += (sender, e) => { data.BytesReceived = e.BytesReceived; data.TotalBytesToReceive = e.TotalBytesToReceive; data.Percentage = e.ProgressPercentage; callback.Invoke(data); }; web.DownloadFileAsync(new Uri(updateInfo.Link), filename); } } catch (Exception ex) { Logger.Warn(ex); data.Success = false; callback.Invoke(data); if (File.Exists(filename)) { File.Delete(filename); } } }
/// <summary> /// 下载更新包并且更新文件 /// </summary> /// <param name="updateInfo"></param> /// <param name="callback"></param> public static void Update(UpdateInfo updateInfo, UpdateProcessChangedHandler callback) { var filename = Path.Combine(Application.StartupPath, string.Format("ColorWanted-{0}.tmp.exe", updateInfo.Version)); var data = new UpdateProcessChangedData(); try { using (var web = new WebClient()) { data.Success = true; web.DownloadFileCompleted += (sender, e) => { if (data.TotalBytesToReceive != updateInfo.FileSize) { data.Success = false; callback.Invoke(data); return; } Thread.Sleep(2000); Process.Start(filename, string.Format(@"-update 1 ""{0}""", Application.ExecutablePath)); Application.Exit(); }; web.DownloadProgressChanged += (sender, e) => { data.BytesReceived = e.BytesReceived; data.TotalBytesToReceive = e.TotalBytesToReceive; data.Percentage = e.ProgressPercentage; callback.Invoke(data); }; web.DownloadFileAsync(new Uri(updateInfo.Link), filename); } } catch { data.Success = false; callback.Invoke(data); if (File.Exists(filename)) { File.Delete(filename); } } }