我正在为一台机器开发一个向导,该向导将用作其他机器的备份.当它替换现有机器时,它需要设置其IP地址、DNS、WINS和主机名以匹配要替换的机器.

在.Net(C#)中是否有允许我以编程方式执行此操作的库?

有多个NIC,每个NIC都需要单独设置.

EDIT

谢谢你的TimothyP个榜样.它让我走上了正确的道路,快速的回复令人敬畏.

谢谢balexandre.你的代码很完美.我很着急,已经改编了TimothyP链接的示例,但是我希望能早点拿到您的代码.

我还开发了一个使用类似技术更改计算机名称的 routine .我会在将来发布,所以如果你想知道更新,请订阅这个问题RSS feed.我可能会在今天晚些时候或者在周一清理完后起床.

推荐答案

几分钟后就完成了:

using System;
using System.Management;

namespace WindowsFormsApplication_CS
{
  class NetworkManagement
  {
    public void setIP(string ip_address, string subnet_mask)
    {
      ManagementClass objMC =
        new ManagementClass("Win32_NetworkAdapterConfiguration");
      ManagementObjectCollection objMOC = objMC.GetInstances();

      foreach (ManagementObject objMO in objMOC)
      {
        if ((bool)objMO["IPEnabled"])
        {
          ManagementBaseObject setIP;
          ManagementBaseObject newIP =
            objMO.GetMethodParameters("EnableStatic");

          newIP["IPAddress"] = new string[] { ip_address };
          newIP["SubnetMask"] = new string[] { subnet_mask };

          setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
        }
      }
    }

    public void setGateway(string gateway)
    {
      ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
      ManagementObjectCollection objMOC = objMC.GetInstances();

      foreach (ManagementObject objMO in objMOC)
      {
        if ((bool)objMO["IPEnabled"])
        {
          ManagementBaseObject setGateway;
          ManagementBaseObject newGateway =
            objMO.GetMethodParameters("SetGateways");

          newGateway["DefaultIPGateway"] = new string[] { gateway };
          newGateway["GatewayCostMetric"] = new int[] { 1 };

          setGateway = objMO.InvokeMethod("SetGateways", newGateway, null);
        }
      }
    }

    public void setDNS(string NIC, string DNS)
    {
      ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
      ManagementObjectCollection objMOC = objMC.GetInstances();

      foreach (ManagementObject objMO in objMOC)
      {
        if ((bool)objMO["IPEnabled"])
        {
          // if you are using the System.Net.NetworkInformation.NetworkInterface
          // you'll need to change this line to
          // if (objMO["Caption"].ToString().Contains(NIC))
          // and pass in the Description property instead of the name 
          if (objMO["Caption"].Equals(NIC))
          {
            ManagementBaseObject newDNS =
              objMO.GetMethodParameters("SetDNSServerSearchOrder");
            newDNS["DNSServerSearchOrder"] = DNS.Split(',');
            ManagementBaseObject setDNS =
              objMO.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
          }
        }
      }
    }

    public void setWINS(string NIC, string priWINS, string secWINS)
    {
      ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
      ManagementObjectCollection objMOC = objMC.GetInstances();

      foreach (ManagementObject objMO in objMOC)
      {
        if ((bool)objMO["IPEnabled"])
        {
          if (objMO["Caption"].Equals(NIC))
          {
            ManagementBaseObject setWINS;
            ManagementBaseObject wins =
            objMO.GetMethodParameters("SetWINSServer");
            wins.SetPropertyValue("WINSPrimaryServer", priWINS);
            wins.SetPropertyValue("WINSSecondaryServer", secWINS);

            setWINS = objMO.InvokeMethod("SetWINSServer", wins, null);
          }
        }
      }
    } 
  }
}

.net相关问答推荐

无法对.NET MAUI类库进行单元测试

MassTransit RespondAsync 无法返回空值

单线程单元 - 无法实例化 ActiveX 控件

在c#中计算中位数

如何从标头中检索基本身份验证凭据?

如何在 C# 4.0 中使任务进入睡眠状态(或延迟)?

获取类型的默认构造函数的最有效方法

获取 .NET Framework 目录路径

C# 方法可以定义为采用的最大参数数是多少?

在 C# 中转义命令行参数

是否可以更改 Winforms 组合框以禁用输入?

如何将枚举值序列化为 int?

react 式扩展使用的好例子

如何允许程序集(单元测试)访问另一个程序集的内部属性?

如何在 C# 中安全地将 System.Object 转换为bool?

无法加载文件或程序集System.ValueTuple

为什么甚至可以更改私有成员,或使用反射在 C# 中运行私有方法?

MemoryCache 不遵守配置中的内存限制

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

程序员应该使用 SSIS,如果是,为什么?