diff --git a/linker.libs/CommandHelper.cs b/linker.libs/CommandHelper.cs index c82fb4f0..032774ff 100644 --- a/linker.libs/CommandHelper.cs +++ b/linker.libs/CommandHelper.cs @@ -1,4 +1,5 @@ -using System.Diagnostics; +using System; +using System.Diagnostics; using System.IO; namespace linker.libs @@ -11,6 +12,7 @@ namespace linker.libs } public static string PowerShell(string arg, string[] commands, bool readResult = true) { + if (IsPowerShellInstalled() == false) return string.Empty; return Execute("powershell.exe", arg, commands, readResult); } @@ -79,5 +81,24 @@ namespace linker.libs proc.Dispose(); return string.Empty; } + + public static bool IsPowerShellInstalled() + { + string[] powerShellPaths = { + Environment.ExpandEnvironmentVariables(@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"), + Environment.ExpandEnvironmentVariables(@"%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe") + }; + + foreach (string path in powerShellPaths) + { + if (File.Exists(path)) + { + return true; + } + } + + return false; + } + } } diff --git a/linker.tun/LinkerTunDeviceAdapter.cs b/linker.tun/LinkerTunDeviceAdapter.cs index 364c0959..93dbe7f1 100644 --- a/linker.tun/LinkerTunDeviceAdapter.cs +++ b/linker.tun/LinkerTunDeviceAdapter.cs @@ -120,9 +120,15 @@ namespace linker.tun error = $"shutdown are operating"; return false; } - cancellationTokenSource?.Cancel(); - linkerTunDevice?.Shutdown(); - linkerTunDevice?.RemoveNat(out error); + try + { + cancellationTokenSource?.Cancel(); + linkerTunDevice?.Shutdown(); + linkerTunDevice?.RemoveNat(out error); + } + catch (Exception) + { + } error = string.Empty; Interlocked.Exchange(ref operating, 0); diff --git a/linker.tun/LinkerWinTunDevice.cs b/linker.tun/LinkerWinTunDevice.cs index d233e720..21f697d5 100644 --- a/linker.tun/LinkerWinTunDevice.cs +++ b/linker.tun/LinkerWinTunDevice.cs @@ -126,7 +126,14 @@ namespace linker.tun public void RemoveNat(out string error) { error = string.Empty; - CommandHelper.PowerShell(string.Empty, new string[] { $"Remove-NetNat -Name {Name}" }); + try + { + CommandHelper.PowerShell(string.Empty, new string[] { $"Remove-NetNat -Name {Name}" }); + } + catch (Exception ex) + { + error = ex.Message; + } } public void AddRoute(LinkerTunDeviceRouteItem[] ips, IPAddress ip, bool gateway) diff --git a/linker/plugins/tuntap/TuntapTransfer.cs b/linker/plugins/tuntap/TuntapTransfer.cs index 24411d8d..9514740f 100644 --- a/linker/plugins/tuntap/TuntapTransfer.cs +++ b/linker/plugins/tuntap/TuntapTransfer.cs @@ -44,13 +44,11 @@ namespace linker.plugins.tuntap this.config = config; this.tuntapProxy = tuntapProxy; this.runningConfig = runningConfig; - linkerTunDeviceAdapter.Initialize(deviceName, tuntapProxy); linkerTunDeviceAdapter.Shutdown(); linkerTunDeviceAdapter.Clear(); AppDomain.CurrentDomain.ProcessExit += (s, e) => linkerTunDeviceAdapter.Shutdown(); Console.CancelKeyPress += (s, e) => linkerTunDeviceAdapter.Shutdown(); - clientSignInState.NetworkFirstEnabledHandle += Initialize; } diff --git a/linker/startup/StartupTransfer.cs b/linker/startup/StartupTransfer.cs index fa48fda5..377bcb05 100644 --- a/linker/startup/StartupTransfer.cs +++ b/linker/startup/StartupTransfer.cs @@ -89,9 +89,15 @@ namespace linker.startup foreach (var startup in startups) { if (config.Data.Common.Modes.Contains("client")) + { + LoggerHelper.Instance.Warning($"add startup {startup.Name} client"); startup.AddClient(serviceCollection, config, assemblies); + } if (config.Data.Common.Modes.Contains("server")) + { + LoggerHelper.Instance.Warning($"add startup {startup.Name} server"); startup.AddServer(serviceCollection, config, assemblies); + } } } @@ -106,9 +112,15 @@ namespace linker.startup foreach (var startup in startups) { if (config.Data.Common.Modes.Contains("client")) + { + LoggerHelper.Instance.Warning($"use startup {startup.Name} client"); startup.UseClient(serviceProvider, config, assemblies); + } if (config.Data.Common.Modes.Contains("server")) + { + LoggerHelper.Instance.Warning($"use startup {startup.Name} server"); startup.UseServer(serviceProvider, config, assemblies); + } } } }