2015-02-05 4 views
0

В следующем методе я запускаю процесс вызова WMIC.exe, чтобы запросить DeviceID подключенного устройства USB. Проблема в том, что иногда, хотя устройство подключено, WIMC не возвращает экземпляр, как если бы устройство не было подключено. Тем не менее, диспетчер устройств показывает устройство в разделе «Порты (COM & LPT)», что означает, что информация WMIC неточна. Я имею в виду, что если устройство потерпело крах или каким-то образом было что-то не работает с устройством, и ему понадобится какой-то сброс, он также не должен находиться в списке диспетчера устройств.WMIC.exe не находит подключенное устройство usb

Метод:

private string DonglePortName() 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.FileName = "C:\\Windows\\System32\\wbem\\WMIC.exe"; 
     startInfo.Arguments = "PATH Win32_SerialPort GET /VALUE"; 
     startInfo.RedirectStandardOutput = true; 
     startInfo.UseShellExecute = false; 
     startInfo.CreateNoWindow = true; 

     Process processTemp = new Process(); 
     processTemp.StartInfo = startInfo; 
     processTemp.EnableRaisingEvents = true; 

     processTemp.Start(); 
     string output = processTemp.StandardOutput.ReadToEnd(); 
     int indexOfBGEntry = output.IndexOf("Bluegiga Bluetooth Low Energy"); 
     if(indexOfBGEntry > -1) 
     { 
      string output_sub = output.Substring(indexOfBGEntry); 
      string str = "DeviceID="; 
      int i = output_sub.IndexOf(str); 
      int start = i + str.Length; 

      string substr = output_sub.Substring(start); 
      int end = substr.IndexOf("\r"); 

      return output_sub.Substring(start, end); 
     } 
     return null; 
    } 

На этом этапе выполнения на CMD окно:

C:\\Windows\\System32\\wbem\\WMIC.exe PATH Win32_SerialPort GET /VALUE

возвращается:

No Instance(s) Available. 

, когда в то же время диспетчер устройств показывает (даже после нажатия на проверку аппаратных изменений).

Так что код C#, приведенный выше, на самом деле не нужен, чтобы продемонстрировать проблему, но я имею только это здесь, если кто-то может предложить другой, более надежный способ получения порта устройства (на C#) или указать причину за неточность WMIC.

Другой ключ заключается в том, что WMIC всегда возвращает No Instance(s) Available после исключения (и сбоя) в другой части кода, который читает/записывает в SerialPort. Затем я должен отключить и повторно использовать USB-устройство, а затем снова «просмотреть» WMIC. Тем не менее, диспетчер устройств показывает устройство, когда он постоянно подключен.

ответ

0

Вы ищете неправильный путь WMIC, так как класс Win32_SerialPortWMI представляет собой последовательный порт в компьютерной системе под управлением Windows. Короче говоря, здесь ProviderType свойство (связь типа провайдера) список:

FAX устройства, LAT протокол, модемное устройство, сетевой мост, параллельный порт Последовательный порт RS232, RS422 порт, RS423 порт, RS-449 порт, устройство сканера, TCP/IP Telnet, X.25, Не выбрано

Проверьте следующий вывод команды, а:

wmic path CIM_LogicalDevice where "Description like 'USB%'" get /value 

Ресурс: Computer System Hardware Classes

Смежные вопросы