Установите DNS на «Автоматическое получение» программно

#c# #.net #winforms #networking #dns

#c# #.net #winforms #сеть #dns

Вопрос:

Используя C # в .NET, как мне настроить DNS-серверы на «Автоматическое получение»? Я могу установить IP-адресам желаемые значения следующим образом.

 ManagementClass mClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection mObjCol = mClass.GetInstances();
foreach (ManagementObject mObj in mObjCol)
{
  if ((bool)mObj["IPEnabled"])
  {
     ManagementBaseObject mboDNS = mObj.GetMethodParameters("SetDNSServerSearchOrder");
     if (mboDNS != null)
     {
        //Assume X.X.X.X and X.X.X.X are the IPs.
        string[] sIPs = { "X.X.X.X", "X.X.X.X" };
        mboDNS["DNSServerSearchOrder"] = sIPs;
        mObj.InvokeMethod("SetDNSServerSearchOrder", mboDNS, null);
     }
  }
}
  

Я попытался установить для обоих IP-адресов значение null, например sIps = { null, null }; , но в итоге настройки вообще не изменились.

Ответ №1:

Попробуйте установить DNSServerSearchOrder равным null вместо использования массива нулевых строк.

 ManagementClass mClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection mObjCol = mClass.GetInstances();
foreach (ManagementObject mObj in mObjCol)
{
  if ((bool)mObj["IPEnabled"])
  {
     ManagementBaseObject mboDNS = mObj.GetMethodParameters("SetDNSServerSearchOrder");
     if (mboDNS != null)
     {
        mboDNS["DNSServerSearchOrder"] = null;
        mObj.InvokeMethod("SetDNSServerSearchOrder", mboDNS, null);
     }
  }
}
  

Комментарии:

1. Как я об этом не подумал?! Спасибо!

2. Иногда трудно увидеть дерево для всех этих деревьев. Со мной это происходит постоянно. 🙂

3. Примечание: Настройка требует запуска кода либо с правами администратора, либо пользователем с правами записи WMI.