Хотя на вопрос был дан ответ около 7 лет назад, я нашел ОЧЕНЬ простой способ сделать это в C # с помощью netsh.exe.
Это работает, только если вы запускаете программу от имени администратора.
Команда:
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;
}
Приведенный выше код также выполняет некоторую проверку ошибок, чтобы убедиться, что процесс действительно запущен, и вводит небольшую задержку, чтобы изменение метрики могло иметь шанс вступить в силу.Я обнаружил, что у меня были некоторые проблемы в моем коде, когда я не включил задержку.