如何使用c更改网络适配器的接口度量



关于下面的链接

https://stackoverflow.com/questions/5577406/enable-both-lan-intranet-and-usb-internet

有没有一种方法可以通过编程使用c#来实现这一点?

这里有一篇代码项目文章,向您展示了如何做到这一点:

http://www.codeproject.com/KB/IP/winnetstat.aspx

基本上,您使用IP助手API和SetIpForwardEntry方法来实现这一点。

以下是一篇文章,将带您了解如何实现它(附带代码):

http://www.developer.com/ws/pc/article.php/10947_3415521_2/IP-Helper-API-ARP-Routing-and-Network-Statistics.htm

虽然这个问题在大约7年前就已经得到了答案,但我在C#中找到了一种非常简单的方法,可以使用netsh.exe。

只有当您以管理员身份运行程序时,这才有效。

命令是:

netsh.exe接口ipv4设置接口"myNICsName"metric=20

若要将度量设置为"自动",请将其设置为0。上限是9999,但如果你使用更高的值,它只会为你设置为9999。

要用程序实现这一点,只需使用Process。按以下方式启动:

        System.Diagnostics.Process p = new System.Diagnostics.Process
        {
            StartInfo =
            {
                FileName = "netsh.exe",
                Arguments = $"interface ipv4 set interface "{nicName}" metric={metric}",
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };
        bool started = p.Start();
        if (started)
        {
            if (SpinWait.SpinUntil(() => p.HasExited, TimeSpan.FromSeconds(20)))
            {
                Log.Write($"Successfully set {nicName}'s metric to {metric}");
                Log.Write($"Sleeping 2 seconds to allow metric change on {nicName} to take effect.");
                Thread.Sleep(2000);
                return true;
            }
            Log.Write($"Failed to set {nicName}'s metric to {metric}");
            return false;
        }

上面的代码还进行了一些错误检查,以确保进程确实启动,并设置了一个短延迟,以便度量更改有机会生效。当我没有包括延迟时,我发现我的代码中有一些问题。

最新更新