Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetPortNames()在Windows中返回过时的数据/删除过时的组件项?_C#_Windows_Serial Port_Registry - Fatal编程技术网

C# GetPortNames()在Windows中返回过时的数据/删除过时的组件项?

C# GetPortNames()在Windows中返回过时的数据/删除过时的组件项?,c#,windows,serial-port,registry,C#,Windows,Serial Port,Registry,我目前正在从事一个项目,使用C#中的类与我工作的公司使用的基于RS232的校准设备进行通信。在SerialPort类中,有一个名为的静态方法 不幸的是,Windows在保留过时的端口条目方面存在严重问题。如果我从我的计算机调用GetPortNames(),它将返回以下端口: COM3 COM4 COM1 在这些端口中,目前只有一个物理存在。我的电脑背面有一个PCIe RS232卡。这被指定为COM1 其他两个端口(COM3和COM4)由USB至空调制解调器电缆创建。这些条目仍然存在于注册表中,即

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

不幸的是,Windows在保留过时的端口条目方面存在严重问题。如果我从我的计算机调用
GetPortNames()
,它将返回以下端口:

COM3

COM4

COM1

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

其他两个端口(
COM3
COM4
)由USB至空调制解调器电缆创建。这些条目仍然存在于注册表中,即使这些电缆早已被分离(COM8存在了一段时间,但在例行地插拔USB电缆几次后被删除)

这对我来说没关系。我总是可以打开Putty或TeraTerm并检查可用的COM端口,直到找到正确的端口。这对将使用此程序的技术人员来说是不好的。我不知道COM端口是否总是和他们经常移动USB电缆一样

有没有办法(最好是用C语言编程)删除这些过时的条目,或者至少验证哪些条目是活动的

注意事项:

从SerialPort.GetPortNames()MSDN文档:

备注

  • 未指定从GetPortNames返回的端口名的顺序

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

  • 端口名从系统注册表中获取(例如,HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM)如果注册表包含过时或不正确的数据,则GetPortNames方法将返回不正确的数据。


下面的问题是:你已经两年了,不满意。唯一的答案(基本上是“看一看程序X的源代码,并尝试制作类似的东西”)对我来说是无用的

不要担心如何使电脑正常运行。担心是否连接到正确的设备。枚举端口,然后尝试打开并与每个端口通信。您应该有一个握手/标识类型的命令,可以发送到您尝试连接的串行设备。如果你成功地握手,你就知道你有一台设备。

不要担心如何使电脑正常工作。担心是否连接到正确的设备。枚举端口,然后尝试打开并与每个端口通信。您应该有一个握手/标识类型的命令,可以发送到您尝试连接的串行设备。如果握手成功,您就知道您有一台设备。

我认为您可能只需尝试打开端口(不发送数据),如果出现错误,请将其从您自己的本地列表中删除。我还没试过这个,但可能有用。这也可能会导致其他正在使用的端口也消失,但这只会帮助缩小正确的端口:)Windows根本不涉及,由设备驱动程序来编写这些注册表项。除此之外,模拟串行端口的设备驱动程序非常糟糕。处理古怪端口的最佳方法是卸载它们。我认为您可能只需尝试打开端口(不发送数据),如果出现错误,请将其从您自己的本地列表中删除。我还没试过这个,但可能有用。这也可能会导致其他正在使用的端口也消失,但这只会帮助缩小正确的端口:)Windows根本不涉及,由设备驱动程序来编写这些注册表项。除此之外,模拟串行端口的设备驱动程序非常糟糕。对付脾气暴躁的人最好的办法就是卸载它们。这并不总是可能的。许多NMEA设备都是只会说话的。“别担心……”这是浪费时间,而且看不到有多少串行端口是愚蠢的,不管它们是空闲的、忙碌的、我们的还是外国的,这并不总是可能的。很多NMEA设备都是只会说话的。“别担心……”这是浪费时间,而且不知道有多少串行端口是空闲的、忙碌的、我们的还是外国的都是愚蠢的