В основном я провожу некоторые тесты производительности и не хочу, чтобы внешняя сеть была фактором перетаскивания. Я ищу способы отключить сетевую LAN. Каков эффективный способ сделать это программно? Меня интересует C#. Было бы круто, если бы у кого-нибудь есть фрагмент кода, который поможет понять суть дела.
Да, но здесь есть реальный рабочий код C#.
Пожалуйста, перейдите по ссылке ниже. это может вам помочь. http://stackoverflow.com/questions/3053372/programmatically- включить-отключить-подключение
Хороший вопрос, кажется, имеет долгосрочную актуальность. Голосование за вопрос о ценности. Много хороших ответов, возможно, лучше не называть ни одного ответа. Иногда проще - лучше, и если вы просто хотите переключить сеть, netsh в файле .bat на рабочем столе может помочь. Но я пришел сюда и за примерами кода для обнаружения и переключения соединения, так что код здесь отличный - даже 6 лет спустя.





Нашел эту ветку, пока искал то же самое, так что вот ответ :)
Лучший метод, который я тестировал на C#, использует WMI.
http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx
Фрагмент C#: (System.Management должна указываться в решении и при использовании объявлений)
SelectQuery wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(wmiQuery);
foreach (ManagementObject item in searchProcedure.Get())
{
if (((string)item["NetConnectionId"]) == "Local Network Connection")
{
item.InvokeMethod("Disable", null);
}
}
Обратите внимание, что мне пришлось запускать это как администратор (InvokeMethod () не возвращал ошибку, когда я запускал его как peon).
Это выглядит красиво, но не работает для универсальных приложений Windows.
Используя команду netsh, вы можете включать и отключать «Подключение по локальной сети»
interfaceName is “Local Area Connection”.
static void Enable(string interfaceName)
{
System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" enable");
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();
}
static void Disable(string interfaceName)
{
System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" disable");
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();
}
После нескольких часов мучений с WMI (очевидно, не каждый адаптер предлагает команду Disable или что-то в этом роде), netsh сработал без сбоев с первой попытки.
Имейте в виду, что это также необходимо запускать от имени администратора.
Это сработало для меня! Я думал, что это будет сложно, но вы облегчите мне задачу. Спасибо.
Работал нормально. Предпочитайте этот метод method для / release, поскольку я не хочу менять IP-адрес. Икс
В VB.Net вы также можете использовать его для переключения подключения по локальной сети
Примечание: я использую его в Windows XP, здесь он работает нормально. но в Windows 7 это не работает должным образом.
Private Sub ToggleNetworkConnection()
Try
Const ssfCONTROLS = 3
Dim sConnectionName = "Local Area Connection"
Dim sEnableVerb = "En&able"
Dim sDisableVerb = "Disa&ble"
Dim shellApp = CreateObject("shell.application")
Dim WshShell = CreateObject("Wscript.Shell")
Dim oControlPanel = shellApp.Namespace(ssfCONTROLS)
Dim oNetConnections = Nothing
For Each folderitem In oControlPanel.items
If folderitem.name = "Network Connections" Then
oNetConnections = folderitem.getfolder : Exit For
End If
Next
If oNetConnections Is Nothing Then
MsgBox("Couldn't find 'Network and Dial-up Connections' folder")
WshShell.quit()
End If
Dim oLanConnection = Nothing
For Each folderitem In oNetConnections.items
If LCase(folderitem.name) = LCase(sConnectionName) Then
oLanConnection = folderitem : Exit For
End If
Next
If oLanConnection Is Nothing Then
MsgBox("Couldn't find '" & sConnectionName & "' item")
WshShell.quit()
End If
Dim bEnabled = True
Dim oEnableVerb = Nothing
Dim oDisableVerb = Nothing
Dim s = "Verbs: " & vbCrLf
For Each verb In oLanConnection.verbs
s = s & vbCrLf & verb.name
If verb.name = sEnableVerb Then
oEnableVerb = verb
bEnabled = False
End If
If verb.name = sDisableVerb Then
oDisableVerb = verb
End If
Next
If bEnabled Then
oDisableVerb.DoIt()
Else
oEnableVerb.DoIt()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Я изменил лучшее проголосованное решение с Камрул Хасан на один метод и добавил, чтобы дождаться завершения процесса, потому что мой код модульного теста работает быстрее, чем процесс, отключающий соединение.
private void Enable_LocalAreaConection(bool isEnable = true)
{
var interfaceName = "Local Area Connection";
string control;
if (isEnable)
control = "enable";
else
control = "disable";
System.Diagnostics.ProcessStartInfo psi =
new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" " + control);
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();
p.WaitForExit();
}
Для Windows 10 Измените это: для диабла ("netsh", "interface set interface name =" + interfaceName + "admin = DISABLE") и для включения ("netsh", "interface set interface name =" + interfaceName + "admin = ENABLE") И использовать программу как Администратор
static void Disable(string interfaceName)
{
//set interface name = "Ethernet" admin=DISABLE
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface name = " + interfaceName + " admin=DISABLE");
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();
}
static void Enable(string interfaceName)
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface name = " + interfaceName + " admin=ENABLE");
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();
}
И используйте Программу как Администратор !!!!!!
Если вы ищете очень простой способ сделать это, вот вам:
System.Diagnostics.Process.Start("ipconfig", "/release"); //For disabling internet
System.Diagnostics.Process.Start("ipconfig", "/renew"); //For enabling internet
Убедитесь, что вы запускаете как администратор. Надеюсь, вы нашли это полезным!
У меня работает даже не как администратор
Лучшее решение - отключить все сетевые адаптеры, независимо от имени интерфейса, отключить и включить все сетевые адаптеры с помощью этого фрагмента (для запуска необходимы права администратора, иначе ЕГО НЕ РАБОТАЕТ):
static void runCmdCommad(string cmd)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
//startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = $"/C {cmd}";
process.StartInfo = startInfo;
process.Start();
}
static void DisableInternet(bool enable)
{
string disableNet = "wmic path win32_networkadapter where PhysicalAdapter=True call disable";
string enableNet = "wmic path win32_networkadapter where PhysicalAdapter=True call enable";
runCmdCommad(enable ? enableNet :disableNet);
}