Compare commits

..

No commits in common. "b2feaf3ba986863ce337b1de8f0731a7ca27c791" and "f71125d8f355a4bba1cc4e0cd4974d1740e2c4d8" have entirely different histories.

6 changed files with 50 additions and 124 deletions

View file

@ -1,7 +1,4 @@
using System.Diagnostics; using Microsoft.Win32;
using System.Security.Cryptography;
using System.Text;
using Microsoft.Win32;
namespace ServiceLib.Common namespace ServiceLib.Common
{ {
@ -53,24 +50,5 @@ namespace ServiceLib.Common
regKey?.Close(); regKey?.Close();
} }
} }
public static async Task RemoveTunDevice()
{
try
{
var sum = MD5.HashData(Encoding.UTF8.GetBytes("wintunsingbox_tun"));
var guid = new Guid(sum);
var pnpUtilPath = @"C:\Windows\System32\pnputil.exe";
var arg = $$""" /remove-device "SWD\Wintun\{{{guid}}}" """;
// Try to remove the device
await Utils.GetCliWrapOutput(pnpUtilPath, arg);
}
catch (Exception ex)
{
Logging.SaveLog(_tag, ex);
}
}
} }
} }

View file

@ -1,5 +1,4 @@
using System.Diagnostics; using System.Security.Principal;
using System.Security.Principal;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace ServiceLib.Handler namespace ServiceLib.Handler
@ -30,12 +29,7 @@ namespace ServiceLib.Handler
} }
else if (Utils.IsOSX()) else if (Utils.IsOSX())
{ {
await ClearTaskOSX(); //TODO
if (config.GuiItem.AutoRun)
{
await SetTaskOSX();
}
} }
return true; return true;
@ -167,77 +161,5 @@ namespace ServiceLib.Handler
} }
#endregion Linux #endregion Linux
#region macOS
private static async Task ClearTaskOSX()
{
try
{
var launchAgentPath = GetLaunchAgentPathMacOS();
if (File.Exists(launchAgentPath))
{
var args = new[] { "-c", $"launchctl unload -w \"{launchAgentPath}\"" };
await Utils.GetCliWrapOutput("/bin/bash", args);
File.Delete(launchAgentPath);
}
}
catch (Exception ex)
{
Logging.SaveLog(_tag, ex);
}
}
private static async Task SetTaskOSX()
{
try
{
var plistContent = GenerateLaunchAgentPlist();
var launchAgentPath = GetLaunchAgentPathMacOS();
await File.WriteAllTextAsync(launchAgentPath, plistContent);
var args = new[] { "-c", $"launchctl load -w \"{launchAgentPath}\"" };
await Utils.GetCliWrapOutput("/bin/bash", args);
}
catch (Exception ex)
{
Logging.SaveLog(_tag, ex);
}
}
private static string GetLaunchAgentPathMacOS()
{
var homePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
var launchAgentPath = Path.Combine(homePath, "Library", "LaunchAgents", $"{Global.AppName}-LaunchAgent.plist");
Directory.CreateDirectory(Path.GetDirectoryName(launchAgentPath));
return launchAgentPath;
}
private static string GenerateLaunchAgentPlist()
{
var exePath = Utils.GetExePath();
var appName = Path.GetFileNameWithoutExtension(exePath);
return $@"<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE plist PUBLIC ""-//Apple//DTD PLIST 1.0//EN"" ""http://www.apple.com/DTDs/PropertyList-1.0.dtd"">
<plist version=""1.0"">
<dict>
<key>Label</key>
<string>{Global.AppName}-LaunchAgent</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>if ! pgrep -x ""{appName}"" > /dev/null; then ""{exePath}""; fi</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>";
}
#endregion macOS
} }
} }

View file

@ -1,4 +1,4 @@
using System.Diagnostics; using System.Diagnostics;
using System.Text; using System.Text;
namespace ServiceLib.Handler namespace ServiceLib.Handler
@ -83,13 +83,6 @@ namespace ServiceLib.Handler
UpdateFunc(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); UpdateFunc(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")));
await CoreStop(); await CoreStop();
await Task.Delay(100); await Task.Delay(100);
if (Utils.IsWindows() && _config.TunModeItem.EnableTun)
{
await Task.Delay(100);
await WindowsUtils.RemoveTunDevice();
}
await CoreStart(node); await CoreStart(node);
await CoreStartPreService(node); await CoreStartPreService(node);
if (_process != null) if (_process != null)

View file

@ -390,6 +390,7 @@ namespace v2rayN.Desktop.Views
StorageUI(); StorageUI();
await ViewModel?.MyAppExitAsync(false); await ViewModel?.MyAppExitAsync(false);
Close();
} }
#endregion Event #endregion Event
@ -413,10 +414,6 @@ namespace v2rayN.Desktop.Views
{ {
if (Utils.IsOSX() || _config.UiItem.Hide2TrayWhenClose) if (Utils.IsOSX() || _config.UiItem.Hide2TrayWhenClose)
{ {
foreach (var ownedWindow in this.OwnedWindows)
{
ownedWindow.Close();
}
this.Hide(); this.Hide();
} }
else else

View file

@ -176,6 +176,13 @@ namespace v2rayN.Desktop.Views
txbSettingsExceptionTip.IsVisible = false; txbSettingsExceptionTip.IsVisible = false;
panSystemProxyAdvanced.IsVisible = false; panSystemProxyAdvanced.IsVisible = false;
} }
if (Utils.IsOSX())
{
tbAutoRun.IsVisible = false;
togAutoRun.IsVisible = false;
//TODO
}
} }
private async Task<bool> UpdateViewHandler(EViewAction action, object? obj) private async Task<bool> UpdateViewHandler(EViewAction action, object? obj)

View file

@ -1,4 +1,4 @@
using Microsoft.Win32; using Microsoft.Win32;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -64,7 +64,36 @@ namespace v2rayN
BitmapSizeOptions.FromEmptyOptions()); BitmapSizeOptions.FromEmptyOptions());
} }
public static void RemoveTunDevice()
{
try
{
var sum = MD5.HashData(Encoding.UTF8.GetBytes("wintunsingbox_tun"));
var guid = new Guid(sum);
string pnputilPath = @"C:\Windows\System32\pnputil.exe";
string arg = $$""" /remove-device "SWD\Wintun\{{{guid}}}" """;
// Try to remove the device
Process proc = new()
{
StartInfo = new()
{
FileName = pnputilPath,
Arguments = arg,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
proc.Start();
var output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
}
catch
{
}
}
public static void SetDarkBorder(Window window, string? theme) public static void SetDarkBorder(Window window, string? theme)
{ {