2017-03-28 7 views
0

지금까지 내가 (hresult from IMbnInterfaceManager::GetInterfaces when no MBN device exists 참조) 작업 MbnInterfaceManager을 얻기 위해 분투, 그래서 대신 내가 구축 및 C#이 WMI 쿼리를 실행 비주얼 스튜디오 2015 내에서 아무런 문제가있는 응용 프로그램 (또한 Win32_PerfFormattedData_Tcpip_NetworkInterface documentation 참조) 디버깅 :Windows 7, 8.1 및 10에서 대역폭을 어떻게 결정합니까?

string query = "SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface"; 
ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query); 
ManagementObjectCollection moCollection = moSearch.Get(); 

그러나 나는 윈도우 8.1 응용 프로그램을 배포 할 때, 나는이 오류를 쿼리가 실행될 때마다 나타납니다

System.Management.ManagementException: Invalid query 
    at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) 
    at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext() 

사람이이 문제를 해결하는 방법에 대한 제안 사항이 있습니까? 이와 같은 쿼리를 사용할 수 있도록 응용 프로그램을 배포하려면 어떻게합니까?

UPDATE :

내가 Windows 7 또는 Windows 8.1 중 하나에서 Visual Studio 2015 내에서 구축하고 (더 크게 WPF 응용 프로그램의 일부로서) 위의 코드를 실행할 수 있습니다, 나는이를 배포 할 수 있습니다하십시오 ClickOnce를 사용하는 동일한 응용 프로그램이 Windows 7에 성공적으로 실행됩니다. 어떤 이유로 Windows 8.1에 ClickOnce를 사용하여이 응용 프로그램을 배포 할 때 메시지가 Invalid query이됩니다.

답변

0

내가해야할 일은 System.Management 참조가 "로컬 복사"로 설정되어 있는지 확인하는 것입니다.하지만 지금은 테스트 할 수 없습니다. 누구든지 더 좋은 아이디어가 있다면 알려 주시기 바랍니다.

UPDATE :

Windows 7 또는 Windows 10

에 사용되는 것과 동일한 방법으로 윈도우 8.1에 System.Management.dll을 사용할 수 없습니다 내가 발견 한 해당 Windows 8.1 및 Windows 8 전화에서 내 질문에 언급 한 것과 유사한 작업을 수행하십시오. Windows 8.1 개발자 라이센스를 얻거나 Windows 10에서 컴퓨터를 "Developer Mode"로 설정해야 Windows.Networking.Connectivity 네임 스페이스를 사용할 수 있습니다.

  string connectionProfileInfo = string.Empty; 
      ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile(); 

      if (InternetConnectionProfile == null) 
      { 
       rootPage.NotifyUser("Not connected to Internet\n", NotifyType.StatusMessage); 
      } 
      else 
      { 
       connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile); 
       OutputText.Text = connectionProfileInfo; 
       rootPage.NotifyUser("Success", NotifyType.StatusMessage); 
      } 

      // Which calls this function, that allows you to determine how strong the signal is and the associated bandwidth 
      string GetConnectionProfile(ConnectionProfile connectionProfile) 
      { 
       // ... 
        if (connectionProfile.GetSignalBars().HasValue) 
        { 
         connectionProfileInfo += "====================\n"; 
         connectionProfileInfo += "Signal Bars: " + connectionProfile.GetSignalBars() + "\n"; 
        } 
       // ... 
      } 

네임 스페이스를 참조하려면 프로젝트가 Window 8.1 PCL 또는 Windows 8.1 앱인지 확인해야합니다. 자세한 내용은

참조하십시오 https://code.msdn.microsoft.com/windowsapps/network-information-sample-63aaa201

업데이트 2 :

private int GetMaxBandwidth() 
    { 
     int maxBandwidth = 0; 
     NetworkInterface[] networkIntrInterfaces = NetworkInterface.GetAllNetworkInterfaces(); 

     foreach (var networkInterface in networkIntrInterfaces) 
     { 
      IPv4InterfaceStatistics interfaceStats = networkInterface.GetIPv4Statistics(); 
      int bytesSentSpeed = (int)(interfaceStats.BytesSent); 
      int bytesReceivedSpeed = (int)(interfaceStats.BytesReceived); 

      if (bytesSentSpeed + bytesReceivedSpeed > maxBandwidth) 
      { 
       maxBandwidth = bytesSentSpeed + bytesReceivedSpeed; 
      } 
     } 
    } 
:

윈도우 7, 8.1, 10 대역폭을 얻을 수있을하려면,이 코드를 사용하여 종료