Exemplo n.º 1
0
        private static void DoWork()
        {
            CheckedEventArgs argsCheck = Check(Constants.CurVersion, Constants.UpdaterUrl);

            if (argsCheck.Exception != null)
            {
                if (null != OnEnd)
                {
                    OnEnd(argsCheck.Exception, false);
                }
                return;
            }
            if (argsCheck.Code == "Unavailable")
            {
                if (null != OnProgress)
                {
                    OnProgress(new ProgressEventArgs {
                        Code = "Finished", Desc = argsCheck.Desc, Percent = 100
                    });
                }
                return;
            }
            if (null != OnProgress)
            {
                OnProgress(new ProgressEventArgs {
                    Code = "Progressing", Desc = argsCheck.Desc, Percent = 33
                });
            }
            DownloadedEventArgs argsDownload = Download(argsCheck.FileUrl);

            if (argsDownload.Exception != null)
            {
                if (null != OnEnd)
                {
                    OnEnd(argsDownload.Exception, false);
                }
                return;
            }
            if (null != OnProgress)
            {
                OnProgress(new ProgressEventArgs {
                    Code = "Progressing", Desc = argsDownload.Desc, Percent = 66
                });
            }
            ResultEventArgs argsResult = null;

            if (argsDownload.FilePath.EndsWith(".zip"))
            {
                argsResult = UnZip(argsDownload.FilePath);
            }
            else if (argsDownload.FilePath.EndsWith(".cab"))
            {
                argsResult = ExecuteCab(argsDownload.FilePath);
            }
            if (null == argsResult)
            {
                if (null != OnProgress)
                {
                    OnProgress(new ProgressEventArgs {
                        Code = "Finished", Desc = "升级成功", Percent = 100
                    });
                }
                return;
            }
            if (argsResult.Exception != null)
            {
                if (null != OnEnd)
                {
                    OnEnd(argsResult.Exception, false);
                }
                return;
            }
            if (null != OnProgress)
            {
                OnProgress(new ProgressEventArgs {
                    Code = "Finished", Desc = argsResult.Desc, Percent = 100, NoRun = argsResult.NoRun
                });
            }
        }
Exemplo n.º 2
0
        private static ResultEventArgs UnZip(string filePath)
        {
            ResultEventArgs args = new ResultEventArgs();

            string runPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

            using (ZipInputStream s = new ZipInputStream(File.OpenRead(filePath)))
            {
                ZipEntry theEntry;
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    string directoryName = Path.GetDirectoryName(theEntry.Name);
                    string fileName      = Path.GetFileName(theEntry.Name);

                    // create directory
                    if (!string.IsNullOrEmpty(directoryName) && !Directory.Exists(Path.Combine(runPath, directoryName)))
                    {
                        Directory.CreateDirectory(Path.Combine(runPath, directoryName));
                    }
                    if (!string.IsNullOrEmpty(fileName))
                    {
                        try
                        {
                            using (FileStream streamWriter = File.Create(Path.Combine(runPath, theEntry.Name + ".bak")))
                            {
                                int    size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)
                                    {
                                        streamWriter.Write(data, 0, size);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                            File.Copy(Path.Combine(runPath, theEntry.Name + ".bak"), Path.Combine(runPath, theEntry.Name), true);
                            File.Delete(Path.Combine(runPath, theEntry.Name + ".bak"));
                        }
                        catch (Exception ex)
                        {
                            args.Exception = ex;
                        }
                    }
                }
            }
            try
            {
                File.Delete(filePath);
            }
            catch (Exception ex)
            {
                args.Exception = ex;
            }

            args.Code = "OK";
            args.Desc = "解压成功";
            return(args);
        }