/// <summary> /// ForTestOnly /// </summary> private void buttonX1_Click(object sender, EventArgs e) { WzPatcher patcher = new WzPatcher(@"F:\TDDOWNLOAD\Anime\00475to00476.patch"); patcher.OpenDecompress(); patcher.PrePatch(); System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew(); foreach (PatchPartContext part in patcher.PatchParts) { if (part.FileName.Equals("map.wz", StringComparison.OrdinalIgnoreCase)) { patcher.RebuildFile(part, @"E:\", @"E:\MapleT"); break; } } sw.Stop(); MessageBoxEx.Show(sw.ElapsedMilliseconds.ToString()); patcher.Close(); }
private void ExecutePatch(string patchFile, string msFolder, bool prePatch) { WzPatcher patcher = null; advTreePatchFiles.Nodes.Clear(); txtNotice.Clear(); txtPatchState.Clear(); this.loggingFileName = Path.Combine(msFolder, $"wcpatcher_{DateTime.Now:yyyyMMdd_HHmmssfff}.log"); try { patcher = new WzPatcher(patchFile); patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged); AppendStateText("Checking paths..."); patcher.OpenDecompress(); AppendStateText("Success\r\n"); if (prePatch) { AppendStateText("Pre-reading patch file...\r\n"); long decompressedSize = patcher.PrePatch(); if (patcher.IsKMST1125Format.Value) { AppendStateText("Patch Type:KMST1125\r\n"); if (patcher.OldFileHash != null) { AppendStateText($"Original File Info:{patcher.OldFileHash.Count} 个\r\n"); } } AppendStateText(string.Format("Patch Size: {0:N0} bytes...\r\n", decompressedSize)); AppendStateText(string.Format("File Changes: {0} 个...\r\n", patcher.PatchParts == null ? -1 : patcher.PatchParts.Count)); txtNotice.Text = patcher.NoticeText; foreach (PatchPartContext part in patcher.PatchParts) { advTreePatchFiles.Nodes.Add(CreateFileNode(part)); } advTreePatchFiles.Enabled = true; AppendStateText("Waiting to adjust update order...\r\n"); waiting = true; waitHandle.WaitOne(); advTreePatchFiles.Enabled = false; patcher.PatchParts.Clear(); for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++) { if (advTreePatchFiles.Nodes[i].Checked) { patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext); } } } AppendStateText("Starting Update\r\n"); DateTime time = DateTime.Now; patcher.Patch(msFolder); AppendStateText("Complete\r\n"); TimeSpan interval = DateTime.Now - time; MessageBoxEx.Show(this, "End of Patch, Duration: " + interval.ToString(), "Patcher"); } catch (ThreadAbortException) { MessageBoxEx.Show("Patch Aborted。", "Patcher"); } catch (Exception ex) { AppendStateText(ex.ToString()); MessageBoxEx.Show(this, ex.ToString(), "Patcher"); } finally { if (patcher != null) { patcher.Close(); patcher = null; } patchThread = null; waitHandle = null; GC.Collect(); panelEx2.Visible = false; expandablePanel2.Height = 157; } }
private void ExecutePatch(string patchFile, string msFolder, bool prePatch) { WzPatcher patcher = null; advTreePatchFiles.Nodes.Clear(); txtNotice.Clear(); txtPatchState.Clear(); try { patcher = new WzPatcher(patchFile); patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged); AppendStateText("Checking patch..."); patcher.OpenDecompress(); AppendStateText("Success\r\n"); if (prePatch) { AppendStateText("Pre-reading patch...\r\n"); long decompressedSize = patcher.PrePatch(); AppendStateText(string.Format("Patch Size: {0:N0} bytes...\r\n", decompressedSize)); AppendStateText(string.Format("File Changes: {0} 个...\r\n", patcher.PatchParts == null ? -1 : patcher.PatchParts.Count)); txtNotice.Text = patcher.NoticeText; foreach (PatchPartContext part in patcher.PatchParts) { advTreePatchFiles.Nodes.Add(CreateFileNode(part)); } advTreePatchFiles.Enabled = true; AppendStateText("Adjusting the update order...\r\n"); waiting = true; waitHandle.WaitOne(); advTreePatchFiles.Enabled = false; patcher.PatchParts.Clear(); for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++) { if (advTreePatchFiles.Nodes[i].Checked) { patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext); } } } AppendStateText("Starting Update: \r\n"); DateTime time = DateTime.Now; patcher.Patch(msFolder); TimeSpan interval = DateTime.Now - time; MessageBoxEx.Show(this, "End of Patch, Time Elapsed: " + interval.ToString(), "Patcher"); } catch (ThreadAbortException) { MessageBoxEx.Show("Patch Aborted.", "Patcher"); } catch (Exception ex) { MessageBoxEx.Show(this, ex.ToString(), "Patcher"); } finally { if (patcher != null) { patcher.Close(); patcher = null; } patchThread = null; waitHandle = null; GC.Collect(); panelEx2.Visible = false; expandablePanel2.Height = 157; } }
private void ExecutePatch(string patchFile, string msFolder, bool prePatch) { WzPatcher patcher = null; advTreePatchFiles.Nodes.Clear(); txtNotice.Clear(); txtPatchState.Clear(); this.loggingFileName = Path.Combine(msFolder, $"wcpatcher_{DateTime.Now:yyyyMMdd_HHmmssfff}.log"); try { patcher = new WzPatcher(patchFile); patcher.PatchingStateChanged += new EventHandler <PatchingEventArgs>(patcher_PatchingStateChanged); AppendStateText($"补丁文件:{patchFile}\r\n"); AppendStateText("正在检查补丁..."); patcher.OpenDecompress(); AppendStateText("成功\r\n"); if (prePatch) { AppendStateText("正在预读补丁...\r\n"); long decompressedSize = patcher.PrePatch(); if (patcher.IsKMST1125Format.Value) { AppendStateText("补丁类型:KMST1125\r\n"); if (patcher.OldFileHash != null) { AppendStateText($"获取原文件信息:{patcher.OldFileHash.Count} 个\r\n"); } } AppendStateText(string.Format("补丁大小: {0:N0} bytes...\r\n", decompressedSize)); AppendStateText(string.Format("文件变动: {0} 个...\r\n", patcher.PatchParts == null ? -1 : patcher.PatchParts.Count)); txtNotice.Text = patcher.NoticeText; foreach (PatchPartContext part in patcher.PatchParts) { advTreePatchFiles.Nodes.Add(CreateFileNode(part)); } advTreePatchFiles.Enabled = true; AppendStateText("等待调整更新顺序...\r\n"); waiting = true; waitHandle.WaitOne(); advTreePatchFiles.Enabled = false; patcher.PatchParts.Clear(); for (int i = 0, j = advTreePatchFiles.Nodes.Count; i < j; i++) { if (advTreePatchFiles.Nodes[i].Checked) { patcher.PatchParts.Add(advTreePatchFiles.Nodes[i].Tag as PatchPartContext); } } } AppendStateText("开始更新\r\n"); DateTime time = DateTime.Now; patcher.Patch(msFolder); AppendStateText("完成\r\n"); TimeSpan interval = DateTime.Now - time; MessageBoxEx.Show(this, "补丁结束,用时" + interval.ToString(), "Patcher"); } catch (ThreadAbortException) { MessageBoxEx.Show("补丁中止。", "Patcher"); } catch (Exception ex) { AppendStateText(ex.ToString()); MessageBoxEx.Show(this, ex.ToString(), "Patcher"); } finally { if (patcher != null) { patcher.Close(); patcher = null; } patchThread = null; waitHandle = null; GC.Collect(); panelEx2.Visible = false; expandablePanel2.Height = 157; } }