2011-12-24 76 views
2

我在写一个通过向USB端口发送字节进行通信的应用程序。我想让用户选择端口并执行此操作,我使用SerialPort.GetPortNames()。不幸的是,它返回一个空数组。该方法应该读取注册表中的数据(HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM),但是SERIALCOMM目录缺失。当我在Linux上运行该程序时,它会按预期列出我的四个USB端口。如何修复注册表/以不同方式发现端口?在C#中发现串行端口

+0

简单的解释是你的机器根本没有任何串口。并非所有USB设备驱动程序都模拟一个串行端口。或者你可能有一个驱动程序安装不正确的设备。您可以使用控制面板+设备管理器仔细检查。询问您在superuser.com使用的特定设备的问题。 – 2011-12-24 14:57:31

回答

1

SerialPort.GetPortNames()是发现串口的正确方法。但是,如果您使用Windows 7,我认为这可能是该方法列出的注册表项权限问题。我在Microsoft.com找到了一篇描述这个问题的文章。

+0

我的确在使用Windows 7。但是当我以管理员身份打开注册表时,我仍然看不到该目录。 – 2011-12-24 12:10:38

+0

此外,该解决方案创建目录为空。 – 2011-12-24 12:34:53

1

SerialPort.GetPortNames()返回安装在机器上的COM端口列表,而不是USB端口。我不认为Windows会为您提供USB端口列表,只有USB设备可用。

尽管名称为“通用串行总线”,但它们不是“串行端口”的常规含义。