4

此代码在 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">网卡名&lt;/param>
        /// <returns></returns>
        private static bool DisableNetWork(ManagementObject network)
        {
            try
            {
                network.InvokeMethod("Disable", null);
                return true;
            }
            catch
            {
                return false;
            }
        }

启用网络的功能

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

5 回答 5

2

假设您使用的是Win32_NetworkAdapter WMI 类,请确保当前进程在提升模式下运行。最重要的是,您可能只想避免像您正在做的那样捕获每个异常,而是分析可能引发的最终异常以获取更多详细信息。

于 2013-03-20T13:31:53.167 回答
2

我的代码在 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("设置失败");
                     }                 
             }
        }
于 2016-01-06T14:45:44.847 回答
1

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

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

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

这对我有用!

于 2013-12-12T14:57:08.297 回答
0

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

于 2014-12-09T10:31:34.943 回答
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

于 2015-03-09T18:44:21.743 回答