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