簡體   English   中英

如何通過C#在Windows 8中禁用/啟用網絡

[英]How to disable/enable network in Windows 8 by C#

此代碼適用於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;
            }
        }

假設您使用的是Win32_NetworkAdapter WMI類,請確保當前進程在提升模式下運行。 最重要的是,您可能希望避免捕獲像您正在執行的每個異常,而是分析可能拋出的最終異常,以獲取更多詳細信息。

我找到了我的評論的答案,並想分享給有類似問題的人...

我沒有“啟用”服務,而是將啟動模式更改為手動(如果您願意,也可以使用自動),這解決了我的問題。

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

這對我有用!

我的代碼在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("設置失敗");
                     }                 
             }
        }

我剛才有同樣的問題。 事實證明,當我在Windows 8中以管理員身份運行相同的應用程序時,一切都開始正常運行。

不推薦使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM