2015-01-05 3 views
2

Я пытаюсь взаимодействовать с WMI через программу vb.net, чтобы любая машина, запускающая эту программу, вытащила настройки IP и настройки DNS-сервера из DHCP для всех сетевых адаптеров с IP-адресом.Установить IP и DNS для использования DHCP из WMI в VB.net

Код, который я сейчас выполняю для DHCP без проблем, но не меняет настройки DNS. Программа компилируется и выполняется без проблем, но настройки DNS не изменяются автоматически из DHCP.

Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration") 
    Dim objMOC As ManagementObjectCollection = objMC.GetInstances() 

    For Each objMO As ManagementObject In objMOC 
     If (Not CBool(objMO("IPEnabled"))) Then 
      Continue For 
     End If 

     Try 
      Dim objNewIP As ManagementBaseObject = Nothing 
      Dim objSetIP As ManagementBaseObject = Nothing 
      Dim objNewDNS As ManagementBaseObject = Nothing 
      Dim objSetDNS As ManagementBaseObject = Nothing 

      objNewIP = objMO.GetMethodParameters("EnableDHCP") 
      objSetIP = objMO.InvokeMethod("EnableDHCP", Nothing, Nothing) 
      objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder") 
      objSetDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", Nothing, Nothing) 

     Catch ex As Exception 
      MessageBox.Show("Settings unchanged : " & ex.Message) 
     End Try 
    Next objMO 

Я так близко к решению этого вопроса, мне просто нужна помощь, чтобы выяснить этот последний шаг.

ответ

1

Вы досадно должны сделать это через реестр, они не добавили к нему методы WMI. В частности (взято отсюда: https://gallery.technet.microsoft.com/7b1cec46-bdb8-4afc-b240-9789eefce6de), вам нужно установить этот ключ в значение null.

"HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" 

Ниже код с необходимыми новыми подразделами, вставленных в

Const conKeyPath = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" 

    Public Sub Test() 

    Dim objMC As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration") 
    Dim objMOC As ManagementObjectCollection = objMC.GetInstances() 

    For Each objMO As ManagementObject In objMOC 
     If (Not CBool(objMO("IPEnabled"))) Then 
      Continue For 
     End If 

     Try 
      Dim objNewIP As ManagementBaseObject = Nothing 
      Dim objSetIP As ManagementBaseObject = Nothing 
      Dim objNewDNS As ManagementBaseObject = Nothing 
      Dim objSetDNS As ManagementBaseObject = Nothing 

      objNewIP = objMO.GetMethodParameters("EnableDHCP") 
      objSetIP = objMO.InvokeMethod("EnableDHCP", Nothing, Nothing) 
      objNewDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder") 
      objSetDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", Nothing, Nothing) 
      SetDNSAutomatically(objMO.GetPropertyValue("settingID")) 

     Catch ex As Exception 
      MessageBox.Show("Settings unchanged : " & ex.Message) 
     End Try 
    Next objMO 
End Sub 
Private Sub SetDNSAutomatically(ByVal settingID As String) 
    If settingID = String.Empty Then 
     Throw New ArgumentNullException("settingID") 
    End If 

    Dim _adapterKeyPath = String.Format("{0}\{1}", conKeyPath, settingID) 
    My.Computer.Registry.SetValue(_adapterKeyPath, "NameServer", String.Empty) 

End Sub 
+0

запросов, такие как [это] (http://stackoverflow.com/questions/209779/how-can-you-change -network-settings-ip-address-dns-wins-host-name-with-code) показывают, что можно изменить настройки DNS в C#, поэтому это должно быть осуществимо в VB.NET - я просто не могу получить он сортировался. – user4404556

+0

В идеале. Те, кто может завершить поддержание кода после меня, не могут понять ничего, кроме базового VB.NET. Чем меньше циклов они пробиты, тем лучше. – user4404556

+0

Пожалуйста, отметьте как ответ, если это решило вашу проблему. –