我目前正在使用SerialPort
C# 中的类与我工作的公司使用的基于 RS232 的校准设备进行通信。在 SerialPort 类中,有一个名为 的静态方法GetPortNames()
。
不幸的是,Windows 在保留陈旧的端口条目方面存在一个可怕的问题。如果我GetPortNames()
从我的机器调用,它会返回以下端口:
COM3
COM4
COM1
在这些端口中,目前只有一个物理存在。我的电脑背面有一个 PCIe RS232 卡。这是指定的COM1
。
其他两个端口 (COM3
和COM4
) 由 USB 到 Null 调制解调器电缆创建。这些条目仍然存在于注册表中,即使电缆早已被分离(COM8 存在一段时间,但在例行插拔 USB 电缆几次后被删除)。
这对我来说没问题。我总是可以打开 Putty 或 TeraTerm 并检查可用的 COM 端口,直到找到正确的端口。这对于将使用此程序的技术人员来说是不合适的。我不知道 COM 端口总是和他们经常移动 USB 电缆一样。
有什么方法(最好在 C# 中以编程方式)我可以删除这些过时的条目,或者至少验证哪些是活动的?
笔记:
从 SerialPort.GetPortNames() MSDN 文档:
评论
未指定从 GetPortNames 返回的端口名称的顺序。
使用 GetPortNames 方法查询当前计算机的有效串行端口名称列表。例如,您可以使用此方法来确定 COM1 和 COM2 是否为当前计算机的有效串口。
端口名称从系统注册表中获取(例如,HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM)。如果注册表包含陈旧或不正确的数据,则 GetPortNames 方法将返回不正确的数据。
以下问题:以编程方式删除 Windows 中的 COM 端口(设置 API ?)已有两年之久且不能令人满意。唯一的答案(本质上是“看看 Program X 的源代码并尝试制作类似的东西”)对我来说毫无用处。