From 3e0578f775e5c30e255243b711136574ea67d33e Mon Sep 17 00:00:00 2001 From: JieXu Date: Fri, 12 Sep 2025 16:24:59 +0800 Subject: [PATCH] Update CheckUpdateViewModel.cs (#7932) * Update CheckUpdateViewModel.cs * Update Utils.cs * Update Utils.cs * Update Utils.cs * Update CheckUpdateViewModel.cs * Update CheckUpdateViewModel.cs * Update Utils.cs --- v2rayN/ServiceLib/Common/Utils.cs | 49 +++++++++++++++++++ .../ViewModels/CheckUpdateViewModel.cs | 15 ++++++ 2 files changed, 64 insertions(+) diff --git a/v2rayN/ServiceLib/Common/Utils.cs b/v2rayN/ServiceLib/Common/Utils.cs index 49a359c0..bfc74801 100644 --- a/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayN/ServiceLib/Common/Utils.cs @@ -857,6 +857,55 @@ public class Utils return false; } + public static bool IsPackagedInstall() + { + try + { + if (IsWindows() || IsOSX()) + { + return false; + } + + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPIMAGE"))) + { + return true; + } + + var exePath = GetExePath(); + var baseDir = string.IsNullOrEmpty(exePath) ? StartupPath() : Path.GetDirectoryName(exePath) ?? ""; + var p = baseDir.Replace('\\', '/'); + + if (string.IsNullOrEmpty(p)) + { + return false; + } + + if (p.Contains("/.mount_", StringComparison.Ordinal)) + { + return true; + } + + if (p.StartsWith("/opt/v2rayN", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + if (p.StartsWith("/usr/lib/v2rayN", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + if (p.StartsWith("/usr/share/v2rayN", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + catch + { + } + return false; + } + private static async Task GetLinuxUserId() { var arg = new List() { "-c", "id -u" }; diff --git a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs index 9dd43a75..4c9c0550 100644 --- a/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs @@ -63,6 +63,16 @@ public class CheckUpdateViewModel : MyReactiveObject private CheckUpdateModel GetCheckUpdateModel(string coreType) { + if (coreType == _v2rayN && Utils.IsPackagedInstall()) + { + return new() + { + IsSelected = false, + CoreType = coreType, + Remarks = ResUI.menuCheckUpdate + " (Not Support)", + }; + } + return new() { IsSelected = _config.CheckUpdateItem.SelectedCoreTypes?.Contains(coreType) ?? true, @@ -104,6 +114,11 @@ public class CheckUpdateViewModel : MyReactiveObject } else if (item.CoreType == _v2rayN) { + if (Utils.IsPackagedInstall()) + { + await UpdateView(_v2rayN, "Not Support"); + continue; + } await CheckUpdateN(EnableCheckPreReleaseUpdate); } else if (item.CoreType == ECoreType.Xray.ToString())