From 6e5af34877e7c33f92dc05646c59613236812bcf Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Tue, 4 Mar 2025 17:02:05 +0800 Subject: [PATCH] Revert "If the update fails during the upgrade, the update will be retried." This reverts commit 9748fbb076aafda5f4d02c1c27fb5a204817884b. --- v2rayN/AmazTool/Program.cs | 21 +---- v2rayN/AmazTool/UpgradeApp.cs | 169 ++++++++++++++++------------------ v2rayN/AmazTool/Utils.cs | 10 +- 3 files changed, 87 insertions(+), 113 deletions(-) diff --git a/v2rayN/AmazTool/Program.cs b/v2rayN/AmazTool/Program.cs index 389fb627..07f151cf 100644 --- a/v2rayN/AmazTool/Program.cs +++ b/v2rayN/AmazTool/Program.cs @@ -7,33 +7,20 @@ namespace AmazTool { if (args.Length == 0) { - Utils.WriteLine(Resx.Resource.Guidelines); - Utils.Waiting(5); + Console.WriteLine(Resx.Resource.Guidelines); + Thread.Sleep(5000); return; } var argData = Uri.UnescapeDataString(string.Join(" ", args)); if (argData.Equals("rebootas")) { - Utils.Waiting(1); + Thread.Sleep(1000); Utils.StartV2RayN(); return; } - - var tryTimes = 0; - UpgradeApp.Init(); - while (tryTimes++ < 3) - { - if (!UpgradeApp.Upgrade(argData)) - { - continue; - } - Utils.WriteLine(Resx.Resource.Restartv2rayN); - Utils.Waiting(3); - Utils.StartV2RayN(); - break; - } + UpgradeApp.Upgrade(argData); } } } diff --git a/v2rayN/AmazTool/UpgradeApp.cs b/v2rayN/AmazTool/UpgradeApp.cs index 38fd5631..e1a76c3a 100644 --- a/v2rayN/AmazTool/UpgradeApp.cs +++ b/v2rayN/AmazTool/UpgradeApp.cs @@ -6,99 +6,19 @@ namespace AmazTool { internal class UpgradeApp { - public static bool Upgrade(string fileName) + public static void Upgrade(string fileName) { - Utils.WriteLine($"{Resx.Resource.StartUnzipping}\n{fileName}"); - - if (!File.Exists(fileName)) - { - Utils.WriteLine(Resx.Resource.UpgradeFileNotFound); - return false; - } + Console.WriteLine($"{Resx.Resource.StartUnzipping}\n{fileName}"); Utils.Waiting(5); - KillV2rayN(); - - Utils.WriteLine(Resx.Resource.StartUnzipping); - StringBuilder sb = new(); - try + if (!File.Exists(fileName)) { - var splitKey = "/"; - - using var archive = ZipFile.OpenRead(fileName); - foreach (var entry in archive.Entries) - { - try - { - if (entry.Length == 0) - { - continue; - } - - Utils.WriteLine(entry.FullName); - - var lst = entry.FullName.Split(splitKey); - if (lst.Length == 1) - { - continue; - } - - var fullName = string.Join(splitKey, lst[1..lst.Length]); - var entryOutputPath = Utils.GetPath(fullName); - Directory.CreateDirectory(Path.GetDirectoryName(entryOutputPath)!); - //In the bin folder, if the file already exists, it will be skipped - if (fullName.StartsWith("bin") && File.Exists(entryOutputPath)) - { - continue; - } - entry.ExtractToFile(entryOutputPath, true); - - Utils.WriteLine(entryOutputPath); - } - catch (Exception ex) - { - sb.Append(ex.Message); - sb.Append(ex.StackTrace); - } - } - } - catch (Exception ex) - { - sb.Append(Resx.Resource.FailedUpgrade + ex.StackTrace); + Console.WriteLine(Resx.Resource.UpgradeFileNotFound); + return; } - if (sb.Length <= 0) - { - return true; - } - - Utils.WriteLine(sb.ToString()); - Utils.WriteLine(Resx.Resource.FailedUpgrade); - return false; - } - - public static bool Init() - { - //Process temporary files generated by the last update - var files = Directory.GetFiles(Utils.GetPath(""), "*.tmp"); - foreach (var file in files) - { - if (file.Contains(Utils.AmazTool)) - { - File.Delete(file); - } - } - - var destFileName = $"{Utils.GetExePath()}{Guid.NewGuid().ToString("N")[..8]}.tmp"; - File.Move(Utils.GetExePath(), destFileName); - - return true; - } - - private static bool KillV2rayN() - { - Utils.WriteLine(Resx.Resource.TryTerminateProcess); + Console.WriteLine(Resx.Resource.TryTerminateProcess); try { var existing = Process.GetProcessesByName(Utils.V2rayN); @@ -115,10 +35,83 @@ namespace AmazTool catch (Exception ex) { // Access may be denied without admin right. The user may not be an administrator. - Utils.WriteLine(Resx.Resource.FailedTerminateProcess + ex.StackTrace); + Console.WriteLine(Resx.Resource.FailedTerminateProcess + ex.StackTrace); } - return true; + Console.WriteLine(Resx.Resource.StartUnzipping); + StringBuilder sb = new(); + try + { + var thisAppOldFile = $"{Utils.GetExePath()}.tmp"; + File.Delete(thisAppOldFile); + var splitKey = "/"; + + using var archive = ZipFile.OpenRead(fileName); + foreach (var entry in archive.Entries) + { + try + { + if (entry.Length == 0) + { + continue; + } + + Console.WriteLine(entry.FullName); + + var lst = entry.FullName.Split(splitKey); + if (lst.Length == 1) + { + continue; + } + + var fullName = string.Join(splitKey, lst[1..lst.Length]); + + if (string.Equals(Utils.GetExePath(), Utils.GetPath(fullName), StringComparison.OrdinalIgnoreCase)) + { + File.Move(Utils.GetExePath(), thisAppOldFile); + } + + var entryOutputPath = Utils.GetPath(fullName); + Directory.CreateDirectory(Path.GetDirectoryName(entryOutputPath)!); + //In the bin folder, if the file already exists, it will be skipped + if (fullName.StartsWith("bin") && File.Exists(entryOutputPath)) + { + continue; + } + + try + { + entry.ExtractToFile(entryOutputPath, true); + } + catch + { + Thread.Sleep(1000); + entry.ExtractToFile(entryOutputPath, true); + } + + Console.WriteLine(entryOutputPath); + } + catch (Exception ex) + { + sb.Append(ex.StackTrace); + } + } + } + catch (Exception ex) + { + Console.WriteLine(Resx.Resource.FailedUpgrade + ex.StackTrace); + //return; + } + if (sb.Length > 0) + { + Console.WriteLine(Resx.Resource.FailedUpgrade + sb.ToString()); + //return; + } + + Console.WriteLine(Resx.Resource.Restartv2rayN); + Utils.Waiting(2); + + Utils.StartV2RayN(); } } } diff --git a/v2rayN/AmazTool/Utils.cs b/v2rayN/AmazTool/Utils.cs index a447ff79..d206f898 100644 --- a/v2rayN/AmazTool/Utils.cs +++ b/v2rayN/AmazTool/Utils.cs @@ -14,7 +14,7 @@ namespace AmazTool return AppDomain.CurrentDomain.BaseDirectory; } - public static string GetPath(string? fileName) + public static string GetPath(string fileName) { var startupPath = StartupPath(); if (string.IsNullOrEmpty(fileName)) @@ -25,7 +25,6 @@ namespace AmazTool } public static string V2rayN => "v2rayN"; - public static string AmazTool => "AmazTool"; public static void StartV2RayN() { @@ -45,14 +44,9 @@ namespace AmazTool { for (var i = second; i > 0; i--) { - Utils.WriteLine(i); + Console.WriteLine(i); Thread.Sleep(1000); } } - - public static void WriteLine(object obj) - { - Console.WriteLine(obj); - } } }