From 4eb443e5479079234b7f042e8a31765325e4d0ab Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 13 Oct 2024 20:15:43 +0800 Subject: [PATCH] Bug fix for IsAdministrator This reverts commit 7618f9f7d46ff85747ea67bd7213cf8f218d05e0. --- v2rayN/ServiceLib/Handler/AppHandler.cs | 14 ++++++++++++++ v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs | 7 ++----- v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs | 2 +- v2rayN/v2rayN/Views/MainWindow.xaml.cs | 2 +- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/v2rayN/ServiceLib/Handler/AppHandler.cs b/v2rayN/ServiceLib/Handler/AppHandler.cs index bf3cb420..5f6ab3af 100644 --- a/v2rayN/ServiceLib/Handler/AppHandler.cs +++ b/v2rayN/ServiceLib/Handler/AppHandler.cs @@ -2,11 +2,14 @@ { public sealed class AppHandler { + #region Property + private static readonly Lazy<AppHandler> _instance = new(() => new()); private Config _config; private int? _statePort; private int? _statePort2; private Job? _processJob; + private bool? _isAdministrator; public static AppHandler Instance => _instance.Value; public Config Config => _config; @@ -28,6 +31,17 @@ } } + public bool IsAdministrator + { + get + { + _isAdministrator ??= Utils.IsAdministrator(); + return _isAdministrator.Value; + } + } + + #endregion Property + #region Init public AppHandler() diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs index c76198f2..eba1ce1e 100644 --- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs @@ -10,8 +10,6 @@ namespace ServiceLib.ViewModels { public class StatusBarViewModel : MyReactiveObject { - private bool _isAdministrator { get; set; } - #region ObservableCollection private IObservableCollection<RoutingItem> _routingItems = new ObservableCollectionExtended<RoutingItem>(); @@ -119,8 +117,7 @@ namespace ServiceLib.ViewModels SelectedRouting = new(); SelectedServer = new(); - _isAdministrator = Utils.IsAdministrator(); - if (_config.tunModeItem.enableTun && _isAdministrator) + if (_config.tunModeItem.enableTun && AppHandler.Instance.IsAdministrator) { EnableTun = true; } @@ -414,7 +411,7 @@ namespace ServiceLib.ViewModels { _config.tunModeItem.enableTun = EnableTun; // When running as a non-administrator, reboot to administrator mode - if (EnableTun && !_isAdministrator) + if (EnableTun && !AppHandler.Instance.IsAdministrator) { _config.tunModeItem.enableTun = false; Locator.Current.GetService<MainWindowViewModel>()?.RebootAsAdmin(); diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 83933ef7..17810f94 100644 --- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -103,7 +103,7 @@ namespace v2rayN.Desktop.Views } }); - this.Title = $"{Utils.GetVersion()} - {(Utils.IsAdministrator() ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; + this.Title = $"{Utils.GetVersion()} - {(AppHandler.Instance.IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; if (Utils.IsWindows()) { menuGlobalHotkeySetting.IsVisible = false; diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index c9be54e9..2f45c2e3 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -122,7 +122,7 @@ namespace v2rayN.Views } }); - this.Title = $"{Utils.GetVersion()} - {(Utils.IsAdministrator() ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; + this.Title = $"{Utils.GetVersion()} - {(AppHandler.Instance.IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; if (!_config.guiItem.enableHWA) {