Мой проект требует обнаружения определенного устройства, когда оно подключено к USB. Я могу идентифицировать это устройство только по его описанию/названию устройства, а не по COM-порту. Я обнаружил, что для выполнения правильной функции используется запрос WMI и проверка свойства имени :
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * from WIN32_SerialPort");
foreach (ManagementObject port in searcher.Get())
{
deviceName = (string)foundPort.GetPropertyValue("Name");
...
. Сначала я проверил это, подключив свой телефон, и запрос вернул телефон, найденный на COM3, как и ожидалось. Затем я подключил другое устройство (преобразователь USB в последовательный порт, которое больше похоже на устройство, для которого мне нужен этот проект ), и запрос просто не нашел его. Находит только телефон. Однако это устройство отображается на порту COM4 в диспетчере устройств. Назло мне еще больше, класс SerialPort находит оба устройства, но не предоставляет информацию, необходимую для идентификации устройства :
string[] tempPorts = SerialPort.GetPortNames();
. Я прочитал множество тем на SO и в других местах и не могу найти удовлетворительного решения. Может кто-нибудь объяснить, почему запрос WIN32 _SerialPort не находит мое другое устройство? По какой-то причине он не считается последовательным портом win32? И может ли кто-нибудь указать мне направление решения этой проблемы?