Пример #1
0
        /// <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);
                }
            }
        }
Пример #2
0
        /// <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);
                }
            }
        }