В настоящее время я работаю над проектом с использованием класса SerialPort
в C# для связи с устройствами калибровки на основе RS232, используемыми в компании, в которой я работаю. В классе SerialPort существует статический метод с именем GetPortNames()
.GetPortNames() возвращает устаревшие данные/Удалить устаревшие записи компоновки в Windows?
К сожалению, у Windows возникла ужасная проблема с сохранением записей простоя в порту. Если я позвоню GetPortNames()
от моей машины, он возвращает следующие порты:
COM3
COM4
COM1
Из этих портов, только один физически существует прямо сейчас. У меня есть карта PCIe RS232 на задней панели моего компьютера. Это обозначается COM1
.
Другие два порта (COM3
и COM4
) были созданы кабелями USB-to-Null Modem. Эти записи все еще существуют в реестре, хотя кабели уже давно отсоединены (COM8 существует некоторое время, но был удален после обычного подключения и отсоединения USB-кабелей несколько раз).
Это нормально для меня. Я всегда могу открыть Putty или TeraTerm и проверить доступные COM-порты, пока не найду правильный. Это не подходит для техников, которые будут использовать эту программу. Я не знаю, что COM-порт всегда будет таким же, как и обычные кабели USB.
Есть ли какой-либо способ (желательно программно в C#) Я могу удалить эти устаревшие записи или, по крайней мере, проверить, какие из них активны?
Примечания:
Из SerialPort.GetPortNames() MSDN документация:
Замечания
Порядок имен портов вернулся из GetPortNames не указан.
Используйте метод GetPortNames для запроса текущего компьютера для списка допустимых имен последовательных портов. Например, вы можете использовать этот метод, чтобы определить, являются ли COM1 и COM2 допустимыми последовательными портами для текущего компьютера.
Имена портов получены из системного реестра (например, HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM). Если реестр содержит устаревшие или некорректные данные, метод GetPortNames возвращает неверные данные.
следующий вопрос: Removing COM Ports in Windows programmatically (Setup API ?) два года и неудовлетворительными. Единственный ответ (существенный «Взгляните на исходный код программы X и попытайтесь сделать что-то подобное») бесполезен для меня.
Я думаю, вы могли бы просто попытаться открыть порт (без отправки данных), и если вы получите сообщение об ошибке, удалите его из своего локального списка. Я не пробовал, но это может сработать. Это также может привести к тому, что другие порты использования также исчезнут, но это просто помогает сузить правый :) – Steve
Windows вообще не участвует, драйвер устройства должен записывать эти записи в реестре. В противном случае стандартная потеря, тип драйверов устройств, которые эмулируют последовательный порт, очень огорчен. Лучший способ справиться с капризными - удалить их. –