Umstellung auf DHCP, doch wird nicht komplett umgeschaltet

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von zauber777.

    Umstellung auf DHCP, doch wird nicht komplett umgeschaltet

    Hi,

    ich schalte meinen LAN-Adapter per Code auf statisch und DHCP.
    Nun ist mir aber aufgefallen, dass wenn ich auf DHCP umschalte, dann sieht es zwar in den Eigenschaften des Adapters (Systemsteuerung\Netzwerk und Internet\Netzwerkverbindungen) alles super aus (Haken bei "IP-Adresse automatisch beziehen" und "DNS-Serveradresse automatisch beziehen"), aber wenn ich dann per Commando-Ebene (CMD) per "ipconfig /all" abfrage, steht dann da noch der alte Gateway und auch die IP-Adresse und Subnet stimmen nicht.

    Wenn ich dann auf eine statische Adresse umschalte und auf DHCP per Hand in den Eigenschaften des Adapters (Systemsteuerung\Netzwerk und Internet\Netzwerkverbindungen) umstelle, dann passen alle Einstellungen, die der Adapter per DHCP konfiguriert (IP-Adresse, Subnet und Gateway).

    Hier mein DHCP-Code :

    VB.NET-Quellcode

    1. Public Sub DHCP_LANAdapter()
    2. Dim tmpAdapter As NetworkInterface = DirectCast(MainWindow.ComboBox_LAN_Adapter.SelectedItem, NetworkInterface)
    3. Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
    4. Dim objMOC As ManagementObjectCollection = objMC.GetInstances()
    5. For Each objMO As ManagementObject In objMOC
    6. If objMO.GetPropertyValue("SettingID").ToString = tmpAdapter.Id Then
    7. Try
    8. Dim objNewIP As ManagementBaseObject = Nothing
    9. Dim objSetIP As ManagementBaseObject = Nothing
    10. Dim objNewDNS As ManagementBaseObject = Nothing
    11. Dim objSetDNS As ManagementBaseObject = Nothing
    12. objNewIP = objMO.GetMethodParameters("EnableDHCP")
    13. objSetIP = objMO.InvokeMethod("EnableDHCP", Nothing, Nothing)
    14. objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")
    15. objSetDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", Nothing, Nothing)
    16. SetDNSAutomatically(objMO.GetPropertyValue("settingID").ToString)
    17. Catch ex As Exception
    18. MessageBox.Show("Settings unchanged : " & ex.Message)
    19. End Try
    20. End If
    21. Next objMO
    22. End Sub
    23. Const conKeyPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"
    24. Public Sub SetDNSAutomatically(ByVal settingID As String)
    25. If settingID = String.Empty Then
    26. Throw New ArgumentNullException("settingID")
    27. End If
    28. Dim _adapterKeyPath = String.Format("{0}\{1}", conKeyPath, settingID)
    29. My.Computer.Registry.SetValue(_adapterKeyPath, "NameServer", String.Empty)
    30. End Sub


    Ich habe es auch schon versucht, wenn ich per Code auf DHCP umgestellt habe über den Befehl "ipconfig /renew" oder "ipconfig /release" die Einstellungen zu aktualisieren. Dies half aber auch nicht.

    Könnt ihr hier weiterhelfen? Woran liegt das Problem?
    (ich möchte es nicht per netsh durchführen, sondern per Code)
    Ich habe nun das Problem gefunden, bzw. habe ich eine Möglichkeit gefunden, wie der LAN-Adapter die richtigen DHCP-Daten erhält.
    Der LAN-Adapter muss deaktiviert und wieder aktiviert werden!

    Nun würde ich gerne das deaktivieren und aktivieren des Adapters mit meinen Code einbauen. Ich habe den kompletten Code zum umschalten auf DHCP, deaktivieren/aktivieren in ein Modul ausgelagert. In meiner Hauptform (MainWindow) habe ich einen Button über welchen ich den Sub "DHCP_LANAdapter()" im Modul starte. Nun wäre es super, wenn der Sub warten würde, bis der Code jeweils ausgeführt ist... Es sollte also wie folgt ablaufen :
    - umschalten auf DHCP
    - warten bis auf DHCP umgeschaltet
    - Adapter deaktivieren
    - warten bis deaktiviert ist
    - Adapter wieder aktivieren

    Die Frage ist also wie stelle ich es an, dass der Code immer wartet?

    VB.NET-Quellcode

    1. Public Sub DHCP_LANAdapter()
    2. Dim tmpAdapter As NetworkInterface = DirectCast(MainWindow.ComboBox_LAN_Adapter.SelectedItem, NetworkInterface)
    3. Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
    4. Dim objMOC As ManagementObjectCollection = objMC.GetInstances()
    5. For Each objMO As ManagementObject In objMOC
    6. If objMO.GetPropertyValue("SettingID").ToString = tmpAdapter.Id Then
    7. Try
    8. Dim objNewIP As ManagementBaseObject = Nothing
    9. Dim objSetIP As ManagementBaseObject = Nothing
    10. Dim objNewDNS As ManagementBaseObject = Nothing
    11. Dim objSetDNS As ManagementBaseObject = Nothing
    12. objNewIP = objMO.GetMethodParameters("EnableDHCP")
    13. objSetIP = objMO.InvokeMethod("EnableDHCP", Nothing, Nothing)
    14. objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder")
    15. objSetDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", Nothing, Nothing)
    16. SetDNSAutomatically(objMO.GetPropertyValue("settingID").ToString)
    17. Catch ex As Exception
    18. MessageBox.Show("Settings unchanged : " & ex.Message)
    19. End Try
    20. End If
    21. Next objMO
    22. End Sub
    23. Const conKeyPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"
    24. Public Sub SetDNSAutomatically(ByVal settingID As String)
    25. If settingID = String.Empty Then
    26. Throw New ArgumentNullException("settingID")
    27. End If
    28. Dim _adapterKeyPath = String.Format("{0}\{1}", conKeyPath, settingID)
    29. My.Computer.Registry.SetValue(_adapterKeyPath, "NameServer", String.Empty)
    30. End Sub
    31. Sub LANDisable()
    32. LANAdapterDisable.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    33. LANAdapterDisable.StartInfo.FileName = "netsh"
    34. LANAdapterDisable.StartInfo.Arguments = "interface set interface name=" & MainWindow.ComboBox_LAN_Adapter.SelectedItem & " admin=DISABLE"
    35. LANAdapterDisable.Start()
    36. LANAdapterDisable.WaitForExit()
    37. End Sub
    38. Sub LANEnable()
    39. LANAdapterEnable.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    40. LANAdapterEnable.StartInfo.FileName = "netsh"
    41. LANAdapterEnable.StartInfo.Arguments = "interface set interface name=" & MainWindow.ComboBox_LAN_Adapter.SelectedItem & " admin=ENABLE"
    42. LANAdapterEnable.Start()
    43. LANAdapterEnable.WaitForExit()
    44. End Sub