为 windows 中的接口启用 ipv6

enable ipv6 for interface in windows

如何以编程方式为给定接口启用 IPv6?可以是 netsh、WMI 或任何可以从 C# 程序调用的东西。相当于点击界面属性中的复选框。

这个有效(Windows 8+):

static void SetIPv6State(Guid interfaceId, bool state)
{
    var scope = new ManagementScope("\\.\ROOT\StandardCimv2");
    var query = new ObjectQuery("SELECT * FROM MSFT_NetAdapterBindingSettingData");
    var methodName = state ? "Enable" : "Disable";
    using (var searcher = new ManagementObjectSearcher(scope, query))
    using (var bindings = searcher.Get())
    {
        var binding = bindings.Cast<ManagementObject>().Single(obj => (string)obj["InstanceID"] == interfaceId.ToString("B").ToUpper() + "::ms_tcpip6");
        var parameters = binding.GetMethodParameters(methodName);
        binding.InvokeMethod(methodName, parameters, new InvokeMethodOptions());
    }
}

Windows 7 需要 C++ 代码。