1

我目前正在使用SerialPortC# 中的类与我工作的公司使用的基于 RS232 的校准设备进行通信。在 SerialPort 类中,有一个名为 的静态方法GetPortNames()

不幸的是,Windows 在保留陈旧的端口条目方面存在一个可怕的问题。如果我GetPortNames()从我的机器调用,它会返回以下端口:

COM3
COM4
COM1

在这些端口中,目前只有一个物理存在。我的电脑背面有一个 PCIe RS232 卡。这是指定的COM1

其他两个端口 (COM3COM4) 由 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 的源代码并尝试制作类似的东西”)对我来说毫无用处。

4

1 回答 1

1

不要担心试图使计算机正确。担心确保您连接到正确的设备。枚举端口然后尝试打开并与每个端口进行通信。您应该有一个握手/识别类型命令,您可以将其发送到您尝试连接的串行设备。如果你握手成功,你就知道你有一个设备。

于 2013-11-06T21:51:53.290 回答