2011-11-23 18 views
10

क्या .NET 4.0 में नेटवर्क कनेक्टिविटी को प्रोग्रामेटिक और अस्थायी रूप से डिस्कनेक्ट करने का कोई तरीका है?नेटवर्क कनेक्टिविटी को प्रोग्रामिक रूप से डिस्कनेक्ट करें

मैं जानता हूँ कि मैं ऐसा करने से मौजूदा नेटवर्क कनेक्टिविटी स्थिति प्राप्त कर सकते हैं ...

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() 

लेकिन परीक्षण प्रयोजनों के लिए मैं शारीरिक रूप से नेटवर्क केबल को अनप्लग बिना अपने आवेदन के व्यवहार का परीक्षण जब यह नेटवर्क कनेक्टिविटी खो देता है (चाहते हैं)।

धन्यवाद, क्रिस।

+3

बस डांग बात अनप्लग का पुन: उपयोग कर सकते हैं। :) – rfmodulator

+2

हां, मुझे एहसास है कि मैं नेटवर्क केबल को अनप्लग कर सकता हूं। लेकिन जैसा कि मैंने अपने प्रश्न में कहा था, मैं आवेदन में कनेक्ट और डिस्कनेक्ट की कार्यक्षमता का परीक्षण करने में सहायता के लिए नेटवर्क को प्रोग्रामेटिक रूप से डिस्कनेक्ट करना चाहता हूं। – ChrisNel52

उत्तर

16

आप इसे डब्लूएमआई के साथ कर सकते हैं। यहां एक ऐसा है जिसे हम भौतिक एडाप्टर को इन प्रकार के परिदृश्यों का परीक्षण करने के लिए अक्षम करने के लिए उपयोग करते हैं।

using System.Management; 
using System.Linq; 

namespace DisableNIC 
{ 
    internal static class Program 
    { 
     private static void Main() 
     { 
      var wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter " + 
              "WHERE NetConnectionId != null " + 
               "AND Manufacturer != 'Microsoft' "); 
      using (var searcher = new ManagementObjectSearcher(wmiQuery)) 
      { 
       foreach (var item in searcher.Get().OfType<ManagementObject>()) 
       { 
        if ((string) item["NetConnectionId"] != "Local Area Connection") 
         continue; 

        using (item) 
        { 
         item.InvokeMethod("Disable", null); 
        } 
       } 
      } 
     } 
    } 
} 

आप ओएस नहीं दर्शाई गई है, लेकिन इस

विंडोज 7 और Windows 8 में काम करता है नोट है कि आप कार्य करने के लिए इस के लिए एक प्रशासक होने की आवश्यकता होगी।

+0

मुझे यह पसंद है। सुरुचिपूर्ण, सटीक, और आपने मुझे अपने नेटवर्क केबल को अनप्लग करने के लिए नहीं बताया :-) – ChrisNel52

+3

साइड नोट: इस विधि को विंडोज 7 (और शायद विंडोज 8 और विंडोज विस्टा) पर व्यवस्थापक अधिकारों की आवश्यकता है। – Karsten

1

यदि आप 'प्रबंधित वाईफ़ाई एपीआई' का उपयोग करते हैं तो आप बस प्रोफ़ाइल को हटा सकते हैं। यह मेरे लिए काम किया।

WlanClient client = new WlanClient(); 

WlanClient.WlanInterface m_WlanInterface = client.Interfaces.Where(i => i.InterfaceDescription.Contains(InterfaceIdentifierString)).First(); 
m_WlanInterface.DeleteProfile(ConnectionProfileString); 

आपको लगता है कि नेटवर्क से पुन: कनेक्ट करने की जरूरत है, एक्सएमएल प्रोफाइल को बचाने के लिए सुनिश्चित हो:

string xmlString = m_WlanInterface.GetProfileXml(ConnectionProfileString) 

तो फिर तुम यह

m_WlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, xmlString, true); 
m_WlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, ConnectionProfileString); 
संबंधित मुद्दे