From 54fe669d89fc4c347cbc52fea95bb3a9114a3451 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 18 Jan 2025 16:58:44 +0800 Subject: [PATCH] Copy the bin folder to the storage location (for init) --- v2rayN/ServiceLib/Common/FileManager.cs | 10 +++++++--- v2rayN/ServiceLib/Common/Utils.cs | 15 ++++++++++----- v2rayN/ServiceLib/Handler/AppHandler.cs | 2 +- v2rayN/ServiceLib/Handler/CoreHandler.cs | 11 +++++++++++ .../ViewModels/BackupAndRestoreViewModel.cs | 2 +- .../ServiceLib/ViewModels/CheckUpdateViewModel.cs | 2 +- 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/v2rayN/ServiceLib/Common/FileManager.cs b/v2rayN/ServiceLib/Common/FileManager.cs index 11d03eb0..4431fbea 100644 --- a/v2rayN/ServiceLib/Common/FileManager.cs +++ b/v2rayN/ServiceLib/Common/FileManager.cs @@ -156,7 +156,7 @@ namespace ServiceLib.Common return true; } - public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive, string? ignoredName) + public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive, bool overwrite, string? ignoredName = null) { // Get information about the source directory var dir = new DirectoryInfo(sourceDir); @@ -183,7 +183,11 @@ namespace ServiceLib.Common continue; } var targetFilePath = Path.Combine(destinationDir, file.Name); - file.CopyTo(targetFilePath, true); + if (!overwrite && File.Exists(targetFilePath)) + { + continue; + } + file.CopyTo(targetFilePath, overwrite); } // If recursive and copying subdirectories, recursively call this method @@ -192,7 +196,7 @@ namespace ServiceLib.Common foreach (var subDir in dirs) { var newDestinationDir = Path.Combine(destinationDir, subDir.Name); - CopyDirectory(subDir.FullName, newDestinationDir, true, ignoredName); + CopyDirectory(subDir.FullName, newDestinationDir, true, overwrite, ignoredName); } } } diff --git a/v2rayN/ServiceLib/Common/Utils.cs b/v2rayN/ServiceLib/Common/Utils.cs index 623cb469..f158097b 100644 --- a/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayN/ServiceLib/Common/Utils.cs @@ -519,7 +519,7 @@ namespace ServiceLib.Common public static bool UpgradeAppExists(out string upgradeFileName) { - upgradeFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GetExeName("AmazTool")); + upgradeFileName = Path.Combine(GetBaseDirectory(), GetExeName("AmazTool")); return File.Exists(upgradeFileName); } @@ -666,12 +666,12 @@ namespace ServiceLib.Common try { //When this file exists, it is equivalent to having no permission to read and write - if (File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "NotStoreConfigHere.txt"))) + if (File.Exists(Path.Combine(GetBaseDirectory(), "NotStoreConfigHere.txt"))) { return false; } - var tempPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "guiTemps"); + var tempPath = Path.Combine(GetBaseDirectory(), "guiTemps"); if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); @@ -699,6 +699,11 @@ namespace ServiceLib.Common return Path.Combine(startupPath, fileName); } + public static string GetBaseDirectory(string fileName = "") + { + return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); + } + public static string GetExePath() { return Environment.ProcessPath ?? Process.GetCurrentProcess().MainModule?.FileName ?? string.Empty; @@ -706,12 +711,12 @@ namespace ServiceLib.Common public static string StartupPath() { - if (Utils.IsNonWindows() && Environment.GetEnvironmentVariable(Global.LocalAppData) == "1") + if (Environment.GetEnvironmentVariable(Global.LocalAppData) == "1") { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "v2rayN"); } - return AppDomain.CurrentDomain.BaseDirectory; + return GetBaseDirectory(); } public static string GetTempPath(string filename = "") diff --git a/v2rayN/ServiceLib/Handler/AppHandler.cs b/v2rayN/ServiceLib/Handler/AppHandler.cs index a0d6e54f..72a080e8 100644 --- a/v2rayN/ServiceLib/Handler/AppHandler.cs +++ b/v2rayN/ServiceLib/Handler/AppHandler.cs @@ -46,7 +46,7 @@ public bool InitApp() { - if (Utils.IsNonWindows() && Utils.HasWritePermission() == false) + if (Utils.HasWritePermission() == false) { Environment.SetEnvironmentVariable(Global.LocalAppData, "1", EnvironmentVariableTarget.Process); } diff --git a/v2rayN/ServiceLib/Handler/CoreHandler.cs b/v2rayN/ServiceLib/Handler/CoreHandler.cs index fd8bed20..44215204 100644 --- a/v2rayN/ServiceLib/Handler/CoreHandler.cs +++ b/v2rayN/ServiceLib/Handler/CoreHandler.cs @@ -25,6 +25,17 @@ namespace ServiceLib.Handler Environment.SetEnvironmentVariable(Global.V2RayLocalAsset, Utils.GetBinPath(""), EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable(Global.XrayLocalAsset, Utils.GetBinPath(""), EnvironmentVariableTarget.Process); + //Copy the bin folder to the storage location (for init) + if (Environment.GetEnvironmentVariable(Global.LocalAppData) == "1") + { + var fromPath = Utils.GetBaseDirectory("bin"); + var toPath = Utils.GetBinPath(""); + if (fromPath != toPath) + { + FileManager.CopyDirectory(fromPath, toPath, true, false); + } + } + if (Utils.IsNonWindows()) { var coreInfo = CoreInfoHandler.Instance.GetCoreInfo(); diff --git a/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs b/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs index faa32ab0..1b7fcc45 100644 --- a/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs @@ -173,7 +173,7 @@ namespace ServiceLib.ViewModels var configDirZipTemp = Utils.GetTempPath($"v2rayN_{DateTime.Now:yyyyMMddHHmmss}"); var configDirTemp = Path.Combine(configDirZipTemp, _guiConfigs); - FileManager.CopyDirectory(configDir, configDirTemp, false, "cache.db"); + FileManager.CopyDirectory(configDir, configDirTemp, false, true, "cache.db"); var ret = FileManager.CreateFromDirectory(configDirZipTemp, fileName); Directory.Delete(configDirZipTemp, true); return await Task.FromResult(ret); diff --git a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs index d8483f8a..e96cf4d1 100644 --- a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs @@ -248,7 +248,7 @@ namespace ServiceLib.ViewModels { foreach (var subDir in dir.GetDirectories()) { - FileManager.CopyDirectory(subDir.FullName, toPath, false, null); + FileManager.CopyDirectory(subDir.FullName, toPath, false, true); subDir.Delete(true); } }