恢复Netsh,因为WMI引起发布时致命错误(https://github.com/dotnet/runtime/issues/57406)

This commit is contained in:
xljiulang 2021-08-14 23:07:35 +08:00
parent 70bbacde13
commit d73701340e
2 changed files with 17 additions and 15 deletions

View File

@ -7,7 +7,6 @@
<ItemGroup>
<PackageReference Include="DNS" Version="6.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="System.Management" Version="5.0.0" />
</ItemGroup>
<ItemGroup>

View File

@ -1,8 +1,8 @@
using FastGithub.Configuration;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Runtime.InteropServices;
@ -94,23 +94,26 @@ namespace FastGithub.Dns
/// </summary>
/// <param name="interface"></param>
/// <param name="nameServers"></param>
/// <returns></returns>
private static bool SetNameServers(NetworkInterface @interface, IEnumerable<IPAddress> nameServers)
private static void SetNameServers(NetworkInterface @interface, IEnumerable<IPAddress> nameServers)
{
var index = @interface.GetIPProperties().GetIPv4Properties().Index;
using var wmi = new ManagementClass("Win32_NetworkAdapterConfiguration");
foreach (ManagementObject adapter in wmi.GetInstances())
Netsh($@"interface ipv4 delete dns ""{@interface.Name}"" all");
foreach (var address in nameServers)
{
if ((int)(uint)adapter["InterfaceIndex"] == index)
{
var inParams = adapter.GetMethodParameters("SetDNSServerSearchOrder");
inParams["DNSServerSearchOrder"] = nameServers.Select(item => item.ToString()).ToArray();
adapter.InvokeMethod("SetDNSServerSearchOrder", inParams, null);
return true;
}
Netsh($@"interface ipv4 add dns ""{@interface.Name}"" {address} validate=no");
}
return false;
static void Netsh(string arguments)
{
var netsh = new ProcessStartInfo
{
FileName = "netsh.exe",
Arguments = arguments,
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden
};
Process.Start(netsh)?.WaitForExit();
}
}
}
}