Internetverbindung trennen
-
Guten Tag,
gibt es eine Möglichkeit mit .NET die Internetverbindung zu trennen?
Ich hab nur eine evtl. brauchbare Seite gefunden.
http://www.vbarchiv.net/tipps/tipp_221-internet-verbindung-trennen.html
Ist zwar VB, aber dafür kann man ja einen Converter benutzen. Bevor der Code nicht gut ist, oder sonstiges macht, kann jemand dazu vielleicht was sagen oder hat was besseres?
Ich wäre dankbar für Links.Mit freundlichen Grüßen,
Freaky
-
Ich kenne noch eine Möglichkeit, welche vielleicht ein wenig besser sein könnte. Zumindest ist das nichts von Modem in der Beschreibung drin, sondern wirklich von NIC oder Adapter. Du kannst über WMI die Netzwerk Adapter abstellen:
http://msdn.microsoft.com/en-us/library/aa394595
http://msdn.microsoft.com/en-us/library/aa394216WMI kann man über den Namensraum
System.Management
benutzen. Du nimmst einManagementObjectSearcher
mit folgendem Query:
SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True
Damit bekommst du nur Adapter, welche auch physikalisch vorhanden sind. Sonst sind noch alle VPN und sonstige Adapter drin. Du kannst das natürlich auch anpassen.
Nachdem das Query ausgeführt wurde, kannst du von den Objekten die Eigenschaften holen und Methoden aufrufen:
ManagementBaseObject.GetPropertyValue
ManagementObject.InvokeMethod
Hier mal einen kleinen Beispielcode:
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE PhysicalAdapter = True"); foreach(ManagementObject obj in searcher.Get()) { var name = obj.GetPropertyValue("Name"); Console.WriteLine("Disable " + name); obj.InvokeMethod("Disable", null); }
Grüssli
-
Vielen Dank Dravere.
Leider gibt mir searcher.Get() immer eine null Collection zurück. Scheinbar werden also keine Adapter oder sonstiges gefunden. Woran könnte das liegen?
-
Hast du es auch schon mal ohne die Bedingung
"PhysicalAdapter = True"
gemacht? Was liefert er dir dann für Ergebnisse zurück? Du kannst sowas übrigens auch auf der PowerShell ausprobieren:
get-wmiobject -query "SELECT * FROM Win32_NetworkAdapter" | format-list name
Oder probier mal das:
"SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2"
Dies sollte alle Adapter liefern, welche aktuell verbunden sind.Und welche Berechtigung hast du auf dem PC?
Grüssli
-
Ich habe die Bedingung rausgenommen und ich hab jetzt auch keine null Collection mehr. Dafür hab ich jetzt das Problem:
ManagementException wurde nicht behandelt.
Diese Methode ist in keiner Klasse implementiert.welches mit bei der Zeile
obj.InvokeMethod("Disable", null);
angezeigt wird.
Wundert mich, denn eigentlich sollte die Disable Methode vorhanden sein.
Verweis und using-Direktive um die Klasse zu nutzen sind hinzugefügt.
Ich habe ganz normale Adminrechte auf meinem HomePC.
-
Also ... ganz ehrlich ... keine Ahnung
Bis jetzt hat das immer gut funktioniert. Du hast doch sicher eine physisch vorhandene NIC, oder? Muss ja sein ...Verzweifelte Frage: Welches Betriebsystem verwendest du? Könntest es sein, dass du noch ein Windows XP hast?
Grüssli
-
Ja, ich habe Windows XP.
-
Disable Method of the Win32_NetworkAdapter Class
MSDN schrieb:
Minimum supported client: Windows Vista
Gilt auch für die Methode
Enable
und die EigenschaftPhysicalAdapter
Huh, unter XP ...
Also mit C# direkt fällt mir nix weiteres ein. Muss man wohl oder übel per P/Invoke oder irgendwelche COM Aktivitäten gehen. Aber bin ich überfragt, was es da noch so gibt. Vielleicht solltest du mal in der WinAPI nachfragen gehen, was es da so für Funktionen gibt.Grüssli
-
Okay, danke für deine Hilfe.
-
Vllt. wäre DotRas etwas für dich?
Bin darüber über den P/Invoke-Aufruf gestolpert: http://pinvoke.net/default.aspx/rasapi32/RasEnumConnections.html