C# 如何检查DNS服务器是否设置为';自动获取';

C# 如何检查DNS服务器是否设置为';自动获取';,c#,dns,wmi,C#,Dns,Wmi,当我使用网卡设置的DNSServerSearchOrder属性获取服务器DNS设置时,它将返回自动解析到的DNS服务器,而不是指示其为动态的值(如null) 例如,要将我的DNS服务器设置为“自动获取”,我需要: ManagementBaseObject newDNS = myNICManagementObject.GetMethodParameters("SetDNSServerSearchOrder"); newDNS["DNSServerSearchOrder"] = null; Mana

当我使用网卡设置的DNSServerSearchOrder属性获取服务器DNS设置时,它将返回自动解析到的DNS服务器,而不是指示其为动态的值(如null)

例如,要将我的DNS服务器设置为“自动获取”,我需要:

ManagementBaseObject newDNS = myNICManagementObject.GetMethodParameters("SetDNSServerSearchOrder");
newDNS["DNSServerSearchOrder"] = null;
ManagementBaseObject setDNS = myNICManagementObject.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
现在,在我用另一个命令将其设置为“自动获取”后,我想确认它已设置:

if( myNICManagementObject["DNSServerSearchOrder"] == null )
{
    MessageBox.Show("DNS Servers Set to Dynamic!");
}
但是,上面的代码并没有像预期的那样返回null(也不会弹出消息框)。相反,它返回它从我的ISP动态计算出来的DNS服务器


是否有一种方法可以通过编程确定我的DNS服务器设置为“自动获取”?

我找到的唯一方法是从注册表读取:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\\{Network_Adaptor_GUID}\NameServer

如果
NameServer
是空的,那么DNS是动态的,否则是静态的。

Vad的回答为我节省了大量寻找解决方案的时间。如果有人想看到一个非常基本的实现,这里有一些C#

using Microsoft.Win32;
//...
private void DNSAutoOrStatic(string NetworkAdapterGUID)
        {
            string path = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\" + NetworkAdapterGUID;
            string ns = (string)Registry.GetValue(path, "NameServer", null);
            if (String.IsNullOrEmpty(ns))
            {
                Console.WriteLine("Dynamic DNS");
            }
            else
            {
                Console.WriteLine("Static DNS: " + ns);
            }
        }
您可以获得以下网络适配器GUID


这是
System.Net.NetworkInformation.NetworkInterface

中Id属性的值。我在问问题之前读过那篇文章,现在已经重新阅读了,但仍然没有看到任何可以回答我问题的内容。我也有同样的问题。我想一定有办法得到这些信息。如果您键入
netsh interface ip show config
,您将看到,netsh能够区分dns服务器的来源。我甚至想过从netsh解析结果,但这不起作用,如果有人在windows安装中使用我的程序,它有另一个本地化包…这会因为手动DNS地址为空而失败。在这个场景中,netsh正确地将配置标识为static(192.168.1.1)。