如何使用C#更改网络适配器的接口指标?

问题描述

| 关于下面的链接 https://stackoverflow.com/questions/5577406/enable-both-lan-intranet-and-usb-internet 有没有办法以编程方式使用c#?     

解决方法

        这是一个代码项目文章,向您展示如何执行此操作: http://www.codeproject.com/KB/IP/winnetstat.aspx 基本上,您可以使用IP Helper API和SetIpForwardEntry方法来完成此任务。 这是一篇指导您如何实现它的文章(带有随附的代码): http://www.developer.com/ws/pc/article.php/10947_3415521_2/IP-Helper-API-ARP-Routing-and-Network-Statistics.htm     ,        尽管大约7年前就回答了该问题,但我发现使用netsh.exe在C#中非常简单的方法。 仅当您以管理员身份运行程序时,此方法才有效。 该命令是: netsh.exe接口ipv4设置接口\“ myNICsName \”指标= 20 要将指标设置为“自动”,只需将其设置为0。 上限是9999,但是如果您使用更高的值,它将为您设置为9999。 要以编程方式执行此操作,只需按以下方式使用Process.Start:
        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;
        }
上面的代码还进行了一些错误检查,以确保该过程确实开始并且延迟了一小段时间,以便使度量标准更改有机会生效。我发现不包括延迟时,我的代码出现了一些问题。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...