为什么通过WMI应用静态IP地址只能工作一次?

时间:2012-07-23 13:09:15

标签: c# .net windows wmi

我即将编写一个简单的网络配置工具,可以静态设置IP地址等,也可以通过WMI自动设置(DHCP)。

不幸的是,静态设置地址只能运行一次!所以当你运行下面的测试函数时,一切都很完美(不要忘记// DYNAMIC的断点!)。但是第二次,当您在控制面板的网络适配器的属性页中检查结果时,IP地址和子网掩码仍为空!当然没有抛出异常,方法调用的结果总是为零(0)。代码在两台不同的Windows 7计算机上进行了测试,当然也是管理员。

void Test()
{

    // find management object
    ManagementClass networkManagementClass = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection networkManagement = networkManagementClass.GetInstances();
    ManagementObject adapter = null;
    foreach (ManagementObject mo in networkManagement)
    {
        if ((bool)mo["IPEnabled"] && (string)mo["Caption"] == "[00000012] Intel(R) 82577LM Gigabit Network Connection")
        {
            adapter = mo;
            break;
        }
    }

    // STATIC

    var val = adapter.InvokeMethod("EnableStatic", new object[] {
        new string[] { "192.168.1.99" },
        new string[] { "255.255.255.0" }
    });

    val = adapter.InvokeMethod("SetGateways", new object[] {
        new string[] { "192.168.1.254" },
        new UInt16[] { 1 }
    });

    val = adapter.InvokeMethod("SetDNSServerSearchOrder", new object[] {
        new string[] { "192.168.1.254" }
    });

    // DYNAMIC

    adapter.InvokeMethod("SetDNSServerSearchOrder", new object[] { new string[0] });

    adapter.InvokeMethod("EnableDHCP", new object[] { });

}

1 个答案:

答案 0 :(得分:1)

最后,我想出了一个解决方法(我猜)Windows错误:在WMI调用之前直接将正确的值填充到注册表中:

// workaround of windows bug (windows refused to apply static ip in network properties dialog)
var settingID = adapter.GetPropertyValue("SettingID"); // adapter = the management object
using (var regKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\" + settingID, true))
{
    regKey.SetValue("EnableDHCP", 0);
    regKey.SetValue("IPAddress", networkState.IPAddress, RegistryValueKind.MultiString);
    regKey.SetValue("SubnetMask", networkState.SubnetMask, RegistryValueKind.MultiString);
}

对我来说就像一个魅力。玩得开心:))

相关问题