mirror of
https://github.com/2dust/v2rayN.git
synced 2026-08-04 06:12:05 +03:00
* deps: bump ZXing.Net.Bindings.SkiaSharp from 0.16.14 to 0.16.22 Patch update to the latest stable release on the 0.16.x line. No breaking changes, no public API changes - purely internal fixes. Verified by a full Release build of v2rayN.sln on .NET 10; no new warnings or errors are introduced. * chore: remove NoWarn and fix .NET 10 build warnings Removes the repository-level NoWarn suppression from Directory.Build.props and addresses the warnings that surface on top of the .NET 10 migration in #9179, keeping Debug, Release, and cross-platform publishes warning-free without suppressing warnings globally. Changes: - Removes <NoWarn>CA1031;CS1591;NU1507;CA1416;IDE0058;IDE0053;IDE0200</NoWarn> from Directory.Build.props. - Annotates Windows-only APIs with [SupportedOSPlatform] and [SupportedOSPlatformGuard] so CA1416 accepts that the Windows surface is gated behind Utils.IsWindows() / Utils.IsNonWindows(). - Splits Utils.SetUnixFileMode into a cross-platform wrapper and a private [UnsupportedOSPlatform("windows")] implementation so File.SetUnixFileMode never reaches the analyzer on Windows builds. - Adds a parameterless constructor to MessageBoxDialog so Avalonia's runtime XAML loader (AVLN3001) can instantiate the dialog. - Moves the WPF high-DPI configuration from app.manifest to <ApplicationHighDpiMode>PerMonitorV2</ApplicationHighDpiMode> in v2rayN.csproj, fixing WFO0003. - Adds global using System.Runtime.Versioning; to ServiceLib and v2rayN.Desktop so the platform attributes are usable project-wide. * test: make cycle dependency tests locale-independent Accept the localized Russian cycle dependency diagnostic in CoreConfigContextBuilderTests so the assertions pass when tests run under a Russian UI culture. * fix: tighten Unix platform handling Adds Linux and macOS platform guards so the analyzer can narrow calls through Utils.IsLinux() and Utils.IsMacOS(). Marks the Linux/macOS autostart and system proxy helpers with explicit platform attributes. Updates Utils.GetSystemHosts() to read /etc/hosts on Linux and macOS while keeping the existing Windows hosts and hosts.ics merge behavior.
77 lines
2.0 KiB
C#
77 lines
2.0 KiB
C#
using Microsoft.Win32;
|
|
|
|
namespace ServiceLib.Common;
|
|
|
|
[SupportedOSPlatform("windows")]
|
|
internal static class WindowsUtils
|
|
{
|
|
private static readonly string _tag = "WindowsUtils";
|
|
|
|
public static string? RegReadValue(string path, string name, string def)
|
|
{
|
|
RegistryKey? regKey = null;
|
|
try
|
|
{
|
|
regKey = Registry.CurrentUser.OpenSubKey(path, false);
|
|
var value = regKey?.GetValue(name) as string;
|
|
return value.IsNullOrEmpty() ? def : value;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logging.SaveLog(_tag, ex);
|
|
}
|
|
finally
|
|
{
|
|
regKey?.Close();
|
|
}
|
|
return def;
|
|
}
|
|
|
|
public static void RegWriteValue(string path, string name, object value)
|
|
{
|
|
RegistryKey? regKey = null;
|
|
try
|
|
{
|
|
regKey = Registry.CurrentUser.CreateSubKey(path);
|
|
if (value.ToString().IsNullOrEmpty())
|
|
{
|
|
regKey?.DeleteValue(name, false);
|
|
}
|
|
else
|
|
{
|
|
regKey?.SetValue(name, value);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logging.SaveLog(_tag, ex);
|
|
}
|
|
finally
|
|
{
|
|
regKey?.Close();
|
|
}
|
|
}
|
|
|
|
public static async Task RemoveTunDevice()
|
|
{
|
|
var tunNameList = new List<string> { "wintunsingbox_tun", "xray_tun" };
|
|
foreach (var tunName in tunNameList)
|
|
{
|
|
try
|
|
{
|
|
var sum = MD5.HashData(Encoding.UTF8.GetBytes(tunName));
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|