GetPortNames()返回陈旧的数据/在Windows中删除陈旧的comport条目?

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

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

COM3
COM4
COM1

在这些港口中,现在只有一个物理存在。 我的电脑背面有一个PCIe RS232卡。 这被指定为COM1

另外两个端口( COM3COM4 )由USB至Null调制解调器电缆创build。 这些条目仍然存在于registry中,即使电缆早已分离(COM8存在一段时间,但在常规插拔USB电缆几次之后才被​​删除)。

这对我来说是好的。 我总是可以打开腻子或TeraTerm,并检查可用的COM端口,直到find正确的。 这对于将要使用这个程序的技术人员来说并不好。 我不知道COM端口将永远与他们经常移动USB电缆相同。

有什么办法(最好在C#编程)我可以删除这些陈旧的条目,或者至less,确认哪些是活动?

笔记:

从SerialPort.GetPortNames()MSDN文档:

备注

  • 没有指定从GetPortNames返回的端口名称的顺序。

  • 使用GetPortNames方法查询当前计算机以获取有效串行端口名称的列表。 例如,可以使用此方法确定COM1和COM2是否为当前计算机的有效串行端口。

  • 端口名称从系统registry中获取(例如,HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM)。 如果registry包含陈旧或不正确的数据,则GetPortNames方法将返回不正确的数据。

下面的问题: 以编程方式(安装程序API?)在Windows中删除COM端口是两岁,不满意。 唯一的答案(essentialy“看看程序X的源代码,并尝试做这样的事情”)对我来说是没用的。

Solutions Collecting From Web of "GetPortNames()返回陈旧的数据/在Windows中删除陈旧的comport条目?"