如何通过C#在Windows 8中禁用/启用网络

时间:2013-03-20 12:49:50

标签: c# networking windows-8 wmi

此代码适用于Windows 7,但不适用于Windows 8.有谁知道原因? 我不知道如何解决它。

重启网络的功能

    private static void RestartNetWork()
    {
        string manage = "SELECT * FROM Win32_NetworkAdapter";
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
        ManagementObjectCollection collection = searcher.Get();
        List<string> netWorkList = new List<string>();
        foreach (ManagementObject obj in collection)
        {
            if (obj["Name"].ToString() == "Qualcomm Atheros AR5B97 Wireless Network Adapter")
            {                
                DisableNetWork(obj);//disable network
                Thread.Sleep(3000);
                EnableNetWork(obj);//enable network
                return;
            }
        }
    }

禁用网络的功能

/// <summary>
        /// 禁用网卡
        /// </summary>5
        /// <param name="netWorkName">网卡名</param>
        /// <returns></returns>
        private static bool DisableNetWork(ManagementObject network)
        {
            try
            {
                network.InvokeMethod("Disable", null);
                return true;
            }
            catch
            {
                return false;
            }
        }

启用网络的功能

/// <summary>
        /// 启用网卡
        /// </summary>
        /// <param name="netWorkName">网卡名</param>
        /// <returns></returns>
        private static bool EnableNetWork(ManagementObject network)
        {
            try
            {
                network.InvokeMethod("Enable", null);
                return true;
            }
            catch
            {
                return false;
            }
        }

5 个答案:

答案 0 :(得分:2)

假设您使用的是Win32_NetworkAdapter WMI类,请确保当前进程正在elevated mode中运行。最重要的是,您可能希望避免像正在执行的那样捕获每个异常,而是分析可能抛出的最终异常,以获取更多详细信息。

答案 1 :(得分:1)

我找到了我的评论的答案,并希望与任何有类似问题的人分享......

我没有“启用”该服务,而是将启动模式更改为手动(如果您愿意,也可以使用自动),这解决了我的问题。

ManagementBaseObject startMode = service.GetMethodParameters("ChangeStartMode");
startMode["startmode"] = "Manual";
service.InvokeMethod("ChangeStartMode", startMode, null);

这对我有用了!

答案 2 :(得分:1)

我的代码在Windows 10中运行良好所以我认为win8可用,但请记住它需要管理员权限,请记住通过右键单击以管理员身份运行。 这是我的代码:

             if (manage["Name"].ToString() == "Realtek RTL8192DE Wireless LAN 802.11N PCI-E NIC MAC1")
             {
                 Console.WriteLine(manage["Name"].ToString() + "\n");

                     try
                     {  
                         //先enable再disable且要管理员权限执行
                         manage.InvokeMethod("Enable", null);
                         manage.InvokeMethod("Disable", null);
                         Console.WriteLine("设置成功");                         
                     }
                     catch
                     {
                         Console.WriteLine("设置失败");
                     }                 
             }
        }

答案 3 :(得分:0)

我刚才遇到了同样的问题。事实证明,当我在Windows 8中以管理员身份运行相同的应用程序时,一切都开始正常运行。

答案 4 :(得分:0)

不推荐使用Win32_NetworkAdapter。对于Windows 8 / Server 2012和转发,您需要使用MSFT_NetAdapter。 https://msdn.microsoft.com/en-us/library/hh968170(v=vs.85).aspx

声明: “不推荐使用Win32_NetworkAdapter类。请改用MSFT_NetAdapter类。” https://msdn.microsoft.com/en-us/library/aa394216%28v=vs.85%29.aspx