diff --git a/v2rayN/ServiceLib/Enums/EViewAction.cs b/v2rayN/ServiceLib/Enums/EViewAction.cs
index d62943c6..18065310 100644
--- a/v2rayN/ServiceLib/Enums/EViewAction.cs
+++ b/v2rayN/ServiceLib/Enums/EViewAction.cs
@@ -7,7 +7,6 @@
         SaveFileDialog,
         AddBatchRoutingRulesYesNo,
         AdjustMainLvColWidth,
-        UpdateSysProxy,
         SetClipboardData,
         AddServerViaClipboard,
         ImportRulesFromClipboard,
diff --git a/v2rayN/ServiceLib/GlobalUsings.cs b/v2rayN/ServiceLib/GlobalUsings.cs
index 23d2a064..a4bf3ccd 100644
--- a/v2rayN/ServiceLib/GlobalUsings.cs
+++ b/v2rayN/ServiceLib/GlobalUsings.cs
@@ -7,4 +7,5 @@ global using ServiceLib.Services;
 global using ServiceLib.Services.Statistics;
 global using ServiceLib.Services.CoreConfig;
 global using ServiceLib.Models;
-global using ServiceLib.Resx;
\ No newline at end of file
+global using ServiceLib.Resx;
+global using ServiceLib.Handler.SysProxy;
\ No newline at end of file
diff --git a/v2rayN/v2rayN.Desktop/Common/ProxySettingLinux.cs b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingLinux.cs
similarity index 99%
rename from v2rayN/v2rayN.Desktop/Common/ProxySettingLinux.cs
rename to v2rayN/ServiceLib/Handler/SysProxy/ProxySettingLinux.cs
index abde3751..a06d329b 100644
--- a/v2rayN/v2rayN.Desktop/Common/ProxySettingLinux.cs
+++ b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingLinux.cs
@@ -1,4 +1,4 @@
-namespace v2rayN.Desktop.Common
+namespace ServiceLib.Handler.SysProxy
 {
     public class ProxySettingLinux
     {
diff --git a/v2rayN/v2rayN.Desktop/Common/ProxySettingOSX.cs b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs
similarity index 82%
rename from v2rayN/v2rayN.Desktop/Common/ProxySettingOSX.cs
rename to v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs
index fbe05894..e2eb4e26 100644
--- a/v2rayN/v2rayN.Desktop/Common/ProxySettingOSX.cs
+++ b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingOSX.cs
@@ -1,4 +1,4 @@
-namespace v2rayN.Desktop.Common
+namespace ServiceLib.Handler.SysProxy
 {
     public class ProxySettingOSX
     {
diff --git a/v2rayN/PacLib/ProxySettingWindows.cs b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingWindows.cs
similarity index 98%
rename from v2rayN/PacLib/ProxySettingWindows.cs
rename to v2rayN/ServiceLib/Handler/SysProxy/ProxySettingWindows.cs
index bbcb3775..112e759c 100644
--- a/v2rayN/PacLib/ProxySettingWindows.cs
+++ b/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingWindows.cs
@@ -1,10 +1,10 @@
-using Microsoft.Win32;
+
 using System;
 using System.Collections.Generic;
 using System.Runtime.InteropServices;
-using static PacLib.ProxySettingWindows.InternetConnectionOption;
+using static ServiceLib.Handler.SysProxy.ProxySettingWindows.InternetConnectionOption;
 
-namespace PacLib
+namespace ServiceLib.Handler.SysProxy
 {
     public class ProxySettingWindows
     {
@@ -362,10 +362,10 @@ namespace PacLib
 
         private static void RegWriteValue(string path, string name, object value)
         {
-            RegistryKey? regKey = null;
+            Microsoft.Win32.RegistryKey? regKey = null;
             try
             {
-                regKey = Registry.CurrentUser.CreateSubKey(path);
+                regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(path);
                 if (string.IsNullOrEmpty(value.ToString()))
                 {
                     regKey?.DeleteValue(name, false);
diff --git a/v2rayN/v2rayN.Desktop/Handler/SysProxyHandler.cs b/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs
similarity index 82%
rename from v2rayN/v2rayN.Desktop/Handler/SysProxyHandler.cs
rename to v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs
index 26163db2..98220cc0 100644
--- a/v2rayN/v2rayN.Desktop/Handler/SysProxyHandler.cs
+++ b/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs
@@ -1,7 +1,6 @@
 using PacLib;
-using v2rayN.Desktop.Common;
 
-namespace v2rayN.Desktop.Handler
+namespace ServiceLib.Handler.SysProxy
 {
     public static class SysProxyHandler
     {
@@ -16,9 +15,9 @@ namespace v2rayN.Desktop.Handler
 
             try
             {
-                int port = AppHandler.Instance.GetLocalPort(EInboundProtocol.http);
-                int portSocks = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks);
-                int portPac = AppHandler.Instance.GetLocalPort(EInboundProtocol.pac);
+                var port = AppHandler.Instance.GetLocalPort(EInboundProtocol.http);
+                var portSocks = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks);
+                var portPac = AppHandler.Instance.GetLocalPort(EInboundProtocol.pac);
                 if (port <= 0)
                 {
                     return false;
@@ -73,12 +72,15 @@ namespace v2rayN.Desktop.Handler
                 }
                 else if (type == ESysProxyType.Pac)
                 {
+                    PacHandler.Start(Utils.GetConfigPath(), port, portPac);
+                    var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
+                    ProxySettingWindows.SetProxy(strProxy, "", 4);
                 }
 
-                //if (type != ESysProxyType.Pac)
-                //{
-                //    PacHandler.Stop();
-                //}
+                if (type != ESysProxyType.Pac)
+                {
+                    PacHandler.Stop();
+                }
             }
             catch (Exception ex)
             {
diff --git a/v2rayN/ServiceLib/ServiceLib.csproj b/v2rayN/ServiceLib/ServiceLib.csproj
index d9b47d73..26187ec7 100644
--- a/v2rayN/ServiceLib/ServiceLib.csproj
+++ b/v2rayN/ServiceLib/ServiceLib.csproj
@@ -43,6 +43,7 @@
 
 
 	<ItemGroup>
+	  <ProjectReference Include="..\PacLib\PacLib.csproj" />
 	  <ProjectReference Include="..\ProtosLib\ProtosLib.csproj" />
 	</ItemGroup>
 
diff --git a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
index 084e0f86..bf00f0d4 100644
--- a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs
@@ -263,7 +263,7 @@ namespace ServiceLib.ViewModels
             {
                 Logging.SaveLog("MyAppExit Begin");
                 //if (blWindowsShutDown)
-                await _updateView?.Invoke(EViewAction.UpdateSysProxy, true);
+                await SysProxyHandler.UpdateSysProxy(_config, true);
 
                 ConfigHandler.SaveConfig(_config);
                 ProfileExHandler.Instance.SaveTo();
@@ -492,12 +492,13 @@ namespace ServiceLib.ViewModels
 
             await LoadCore();
             Locator.Current.GetService<StatusBarViewModel>()?.TestServerAvailability();
+            await SysProxyHandler.UpdateSysProxy(_config, false);
             _updateView?.Invoke(EViewAction.DispatcherReload, null);
         }
 
         public void ReloadResult()
         {
-            //ChangeSystemProxyStatusAsync(_config.systemProxyItem.sysProxyType, false);
+            //Locator.Current.GetService<StatusBarViewModel>()?.ChangeSystemProxyAsync(_config.systemProxyItem.sysProxyType, false);
             BlReloadEnabled = true;
             ShowClashUI = _config.IsRunningCore(ECoreType.sing_box);
             if (ShowClashUI)
diff --git a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
index a93500bc..315e7ebf 100644
--- a/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
+++ b/v2rayN/ServiceLib/ViewModels/StatusBarViewModel.cs
@@ -3,7 +3,6 @@ using ReactiveUI;
 using ReactiveUI.Fody.Helpers;
 using Splat;
 using System.Reactive;
-using System.Reactive.Linq;
 using System.Text;
 
 namespace ServiceLib.ViewModels
@@ -318,10 +317,9 @@ namespace ServiceLib.ViewModels
             ConfigHandler.SaveConfig(_config, false);
         }
 
-        private async Task ChangeSystemProxyAsync(ESysProxyType type, bool blChange)
+        public async Task ChangeSystemProxyAsync(ESysProxyType type, bool blChange)
         {
-            //await _updateView?.Invoke(EViewAction.UpdateSysProxy, _config.tunModeItem.enableTun ? true : false);
-            _updateView?.Invoke(EViewAction.UpdateSysProxy, false);
+            await SysProxyHandler.UpdateSysProxy(_config, false);
 
             BlSystemProxyClear = (type == ESysProxyType.ForcedClear);
             BlSystemProxySet = (type == ESysProxyType.ForcedChange);
diff --git a/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs b/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs
index 2fc63d8e..7e337452 100644
--- a/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs
+++ b/v2rayN/v2rayN.Desktop/Views/StatusBarView.axaml.cs
@@ -6,7 +6,6 @@ using ReactiveUI;
 using Splat;
 using System.Reactive.Disposables;
 using v2rayN.Desktop.Common;
-using v2rayN.Desktop.Handler;
 
 namespace v2rayN.Desktop.Views
 {
@@ -91,11 +90,6 @@ namespace v2rayN.Desktop.Views
         {
             switch (action)
             {
-                case EViewAction.UpdateSysProxy:
-                    if (obj is null) return false;
-                    await SysProxyHandler.UpdateSysProxy(_config, (bool)obj);
-                    break;
-
                 case EViewAction.DispatcherServerAvailability:
                     if (obj is null) return false;
                     Dispatcher.UIThread.Post(() =>
diff --git a/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj b/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj
index 2ed2ee1b..5319c903 100644
--- a/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj
+++ b/v2rayN/v2rayN.Desktop/v2rayN.Desktop.csproj
@@ -33,7 +33,6 @@
 	</ItemGroup>
 
     <ItemGroup>
-      <ProjectReference Include="..\PacLib\PacLib.csproj" />
       <ProjectReference Include="..\ServiceLib\ServiceLib.csproj" />
     </ItemGroup>
  
diff --git a/v2rayN/v2rayN/Handler/SysProxyHandler.cs b/v2rayN/v2rayN/Handler/SysProxyHandler.cs
deleted file mode 100644
index b61f0317..00000000
--- a/v2rayN/v2rayN/Handler/SysProxyHandler.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using PacLib;
-
-namespace v2rayN.Handler
-{
-    public static class SysProxyHandler
-    {
-        public static bool UpdateSysProxy(Config config, bool forceDisable)
-        {
-            var type = config.systemProxyItem.sysProxyType;
-
-            if (forceDisable && type != ESysProxyType.Unchanged)
-            {
-                type = ESysProxyType.ForcedClear;
-            }
-
-            try
-            {
-                int port = AppHandler.Instance.GetLocalPort(EInboundProtocol.http);
-                int portSocks = AppHandler.Instance.GetLocalPort(EInboundProtocol.socks);
-                int portPac = AppHandler.Instance.GetLocalPort(EInboundProtocol.pac);
-                if (port <= 0)
-                {
-                    return false;
-                }
-                if (type == ESysProxyType.ForcedChange)
-                {
-                    var strExceptions = "";
-                    if (config.systemProxyItem.notProxyLocalAddress)
-                    {
-                        strExceptions = $"<local>;{config.constItem.defIEProxyExceptions};{config.systemProxyItem.systemProxyExceptions}";
-                    }
-
-                    var strProxy = string.Empty;
-                    if (Utils.IsNullOrEmpty(config.systemProxyItem.systemProxyAdvancedProtocol))
-                    {
-                        strProxy = $"{Global.Loopback}:{port}";
-                    }
-                    else
-                    {
-                        strProxy = config.systemProxyItem.systemProxyAdvancedProtocol
-                            .Replace("{ip}", Global.Loopback)
-                            .Replace("{http_port}", port.ToString())
-                            .Replace("{socks_port}", portSocks.ToString());
-                    }
-                    ProxySettingWindows.SetProxy(strProxy, strExceptions, 2);
-                }
-                else if (type == ESysProxyType.ForcedClear)
-                {
-                    ProxySettingWindows.UnsetProxy();
-                }
-                else if (type == ESysProxyType.Unchanged)
-                {
-                }
-                else if (type == ESysProxyType.Pac)
-                {
-                    PacHandler.Start(Utils.GetConfigPath(), port, portPac);
-                    var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}";
-                    ProxySettingWindows.SetProxy(strProxy, "", 4);
-                }
-
-                if (type != ESysProxyType.Pac)
-                {
-                    PacHandler.Stop();
-                }
-            }
-            catch (Exception ex)
-            {
-                Logging.SaveLog(ex.Message, ex);
-            }
-            return true;
-        }
-    }
-}
\ No newline at end of file
diff --git a/v2rayN/v2rayN/Views/StatusBarView.xaml.cs b/v2rayN/v2rayN/Views/StatusBarView.xaml.cs
index f1e8c09a..ea53a556 100644
--- a/v2rayN/v2rayN/Views/StatusBarView.xaml.cs
+++ b/v2rayN/v2rayN/Views/StatusBarView.xaml.cs
@@ -96,11 +96,6 @@ namespace v2rayN.Views
                         Application.Current.MainWindow.Icon = WindowsHandler.Instance.GetAppIcon(_config);
                     }), DispatcherPriority.Normal);
                     break;
-
-                case EViewAction.UpdateSysProxy:
-                    if (obj is null) return false;
-                    SysProxyHandler.UpdateSysProxy(_config, (bool)obj);
-                    break;
             }
             return await Task.FromResult(true);
         }
diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj
index 66d3e499..274ea8b8 100644
--- a/v2rayN/v2rayN/v2rayN.csproj
+++ b/v2rayN/v2rayN/v2rayN.csproj
@@ -36,7 +36,6 @@
     </ItemGroup> 	 
 	
 	<ItemGroup>
-	  <ProjectReference Include="..\PacLib\PacLib.csproj" />
 	  <ProjectReference Include="..\ServiceLib\ServiceLib.csproj" />
 	</ItemGroup>