C# 在Windows注册表中设置时,未立即应用网络适配器DNS服务器

C# 在Windows注册表中设置时,未立即应用网络适配器DNS服务器,c#,.net,network-programming,wmi,C#,.net,Network Programming,Wmi,我想在Windows中设置网络适配器的DNS服务器。最初,我尝试使用WMI来实现这个目的,但结果是,在某些情况下,它不允许我做我想做的事情。例如,当我试图在没有电缆连接的情况下设置以太网适配器的DNS服务器时,WMI返回一个错误,表示该适配器未启用IP。另一个问题是,它不支持管理IPv6设置 因此,我决定直接写入Windows注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip[6]\Parameters\Interfac

我想在Windows中设置网络适配器的DNS服务器。最初,我尝试使用WMI来实现这个目的,但结果是,在某些情况下,它不允许我做我想做的事情。例如,当我试图在没有电缆连接的情况下设置以太网适配器的DNS服务器时,WMI返回一个错误,表示该适配器未启用IP。另一个问题是,它不支持管理IPv6设置

因此,我决定直接写入Windows注册表:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip[6]\Parameters\Interfaces\[Interface GUID]\NameServer
不幸的是,当我这样做时,似乎新编写的设置不会立即应用。因此,我使用WMI禁用和启用适配器

然而,这个解决方案似乎真的很麻烦,我想知道是否同样的事情不能以“干净”的方式完成。我正试图在C#,.NETFramework 4.7.2中做到这一点。

NETSH工具呢? 在管理员下运行它

Process.Start("netsh", "interface ip set dns \"NETWORK NAME\" static 8.8.8.8").WaitForExit();

太好了,这个看起来很好用,谢谢!但我仍在想,是否有一种解决方案可以在不启动外部进程的情况下完全以编程方式实现这一点。@MariuszSchimke,也许有必要在这里问一下NETSH在操作系统中使用上述参数做了哪些更改,然后使用C#…@MariuszSchimke,或者你可以做一些疯狂的事情——使用ProcessMonitor和NETSH所做的钩子更改:)