private void OnBtnCreateClick(object sender, EventArgs e) { var dirPath = textBox1.Text; var parent = Directory.GetParent(dirPath)?.FullName; if (parent != null) { void Create() { filePath = Path.Combine(parent, DateTime.Now.ToString("yyyyMMddHHmmssfffffff")) + FileEx.TAR_GZ; TarGZipHelper.Create(filePath, dirPath, progress: ShowTarProgressMessage); Invoke((Action)(() => { progressBar1.Value = progressBar1.Maximum; button2.Enabled = true; })); } button2.Enabled = false; Task.Factory.StartNew(Create); } else { richTextBox1.AppendText("Fail, Parent is null"); richTextBox1.AppendText(Environment.NewLine); } }
private void OnBtnUnpackClick(object sender, EventArgs e) { if (filePath != null) { void Unpack() { var dirName = Path.GetFileName(filePath).Split('.').First(); TarGZipHelper.Unpack(filePath, Path.Combine(Path.GetDirectoryName(filePath).ThrowIsNull(nameof(filePath)), dirName), ShowTarProgressMessage, new Progress <float>(v => { void OnReport() { progressBar1.Value = (int)MathF.Floor(v * 100); } Invoke((Action)OnReport); }), maxProgress: 100f); Invoke((Action)(() => { button3.Enabled = true; })); } button3.Enabled = false; progressBar1.Value = 0; progressBar1.Maximum = 10000; Task.Factory.StartNew(Unpack); } }
protected override void OverwriteUpgrade(string value, bool isIncrement) { if (isIncrement) // 增量更新 { OverwriteUpgradePrivate(value); } else // 全量更新 { var dirPath = Path.Combine(AppContext.BaseDirectory, Path.GetFileNameWithoutExtension(value)); if (Directory.Exists(dirPath)) { Directory.Delete(dirPath, true); } if (TarGZipHelper.Unpack(value, dirPath, progress: new Progress <float>(OnReportDecompressing), maxProgress: MaxProgressValue)) { OnReport(MaxProgressValue); IOPath.FileTryDelete(value); OverwriteUpgradePrivate(dirPath); } else { toast.Show(SR.UpdateUnpackFail); OnReport(MaxProgressValue); } } void OverwriteUpgradePrivate(string dirPath) { OnExit(); var updateCommandPath = Path.Combine(IOPath.CacheDirectory, "update.cmd"); IOPath.FileIfExistsItDelete(updateCommandPath); var updateCommand = string.Format( SR.ProgramUpdateCmd_, AppHelper.ProgramName, dirPath.TrimEnd(Path.DirectorySeparatorChar), AppContext.BaseDirectory, AppHelper.ProgramPath); updateCommand = "chcp" + Environment.NewLine + "chcp 65001" + Environment.NewLine + updateCommand; File.WriteAllText(updateCommandPath, updateCommand, Encoding.UTF8); using var p = new Process(); p.StartInfo.FileName = updateCommandPath; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = !ThisAssembly.Debuggable; // 不显示程序窗口 p.StartInfo.Verb = "runas"; // 管理员权限运行 p.Start(); // 启动程序 } }