В следующем методе я запускаю процесс вызова 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. Тем не менее, диспетчер устройств показывает устройство, когда он постоянно подключен.