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

如何使用c#更改网络适配器的接口度量?,c#,networking,C#,Networking,关于下面的链接 有没有一种方法可以通过编程方式使用c#来实现这一点?下面是一篇代码项目文章,向您展示了如何实现这一点: 基本上,您可以使用IP Helper API和SetIpForwardEntry方法来完成这项工作 下面是一篇介绍如何实现它的文章(附带代码): 下面是一篇代码项目文章,向您展示了如何执行此操作: 基本上,您可以使用IP Helper API和SetIpForwardEntry方法来完成这项工作 下面是一篇介绍如何实现它的文章(附带代码): 虽然这个问题在大约7年前就得到

关于下面的链接


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

下面是一篇代码项目文章,向您展示了如何实现这一点:

基本上,您可以使用IP Helper API和SetIpForwardEntry方法来完成这项工作

下面是一篇介绍如何实现它的文章(附带代码):


下面是一篇代码项目文章,向您展示了如何执行此操作:

基本上,您可以使用IP Helper API和SetIpForwardEntry方法来完成这项工作

下面是一篇介绍如何实现它的文章(附带代码):


虽然这个问题在大约7年前就得到了回答,但我发现了一种非常简单的方法,可以在C#中使用netsh.exe来实现这一点

这仅在您以管理员身份运行程序时有效

命令是:

netsh.exe接口ipv4设置接口“myNICsName”度量=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;
        }

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

虽然这个问题在大约7年前得到了回答,但我发现在C#中使用netsh.exe很容易做到这一点

这仅在您以管理员身份运行程序时有效

命令是:

netsh.exe接口ipv4设置接口“myNICsName”度量=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;
        }
上面的代码还进行了一些错误检查,以确保进程确实启动,并在短时间内延迟,以便度量更改有机会生效。当我没有包含延迟时,我发现我的代码中有一些问题