You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C#在Windows系统中直接修改网络适配器的DNS IP地址

C#修改Windows系统DNS地址的正确实现

问题排查

原有代码未生效主要有以下几个核心原因:

  • 权限不足:修改系统网络配置属于特权操作,必须以管理员身份运行程序才会生效,非管理员身份下WMI调用会无报错但实际执行失败
  • 网卡匹配规则不准确:通过Caption包含网卡描述的匹配方式稳定性差,容易匹配到错误的网卡对象
  • 未校验执行结果:SetDNSServerSearchOrder方法调用有返回值,未校验无法确认是否执行成功

优化后代码

using System.Management;
using System.Net.NetworkInformation;

/// <summary>
/// 设置指定网络适配器的DNS服务器地址
/// 仅支持Windows系统,需要管理员权限
/// </summary>
/// <param name="ni">要修改的网络适配器对象</param>
/// <param name="dnsAddresses">DNS地址数组,传null则设为自动获取DNS</param>
/// <returns>执行结果状态码,0为成功</returns>
public static uint SetDNS(this NetworkInterface ni, string[] dnsAddresses)
{
    if (ni == null) return 0;
    
    using ManagementClass managementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
    using ManagementObjectCollection instances = managementClass.GetInstances();
    
    foreach (ManagementObject instance in instances)
    {
        // 仅匹配IP启用、且SettingID和网卡ID完全一致的对象(SettingID是网卡的唯一GUID标识)
        if (!(bool)instance["IPEnabled"] || instance["SettingID"].ToString() != ni.Id)
        {
            instance.Dispose();
            continue;
        }

        using ManagementBaseObject parameters = instance.GetMethodParameters("SetDNSServerSearchOrder");
        parameters["DNSServerSearchOrder"] = dnsAddresses?.Length == 0 ? null : dnsAddresses;
        using ManagementBaseObject result = instance.InvokeMethod("SetDNSServerSearchOrder", parameters, null);
        return (uint)result["ReturnValue"];
    }
    return 999; // 未找到匹配的网卡
}

必做配置

  • 项目右键 -> 添加 -> 引用 -> 程序集 -> 勾选System.Management并保存
  • 强制程序以管理员身份运行:项目新增应用程序清单文件(app.manifest),修改配置项为:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  • 常见返回码说明:
    • 0:执行成功
    • 5:权限不足,未以管理员身份运行
    • 70:传入的DNS地址格式无效
    • 84:配置的IP地址和子网掩码不匹配

修改完成后等待数秒再执行ipconfig /all即可看到修改后的DNS配置,无需调用cmd.exe进程。

内容的提问来源于stack exchange,提问作者TRex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:24:04