C# SerialPort GetPortNames 在 windows 10 上不起作用

C# SerialPort GetPortNames doesn't work on windows 10

一两年前,我在 windows 8 或 windows 8.1 中编写了一个简单程序,它提供 Arduino Uno 和我的 C# Form 应用程序之间的串行端口连接。首先,我检查了 pc 中所有打开的 com 端口,并获取这些端口以进行连接选择。要做到这一点,工作代码如下所示;

private void portCheck_Click(object sender, EventArgs e)
        {
            foreach (string item in System.IO.Ports.SerialPort.GetPortNames())
            {
                //store the each retrieved available port names into the Listbox...    
                if (!portBox.Items.Contains(item))
                { portBox.Items.Add(item); }
            }
        }

我已经很久没有打开这个程序了,现在我格式化我的电脑并使用 windows 10 Education 进行全新安装。当我 运行 这个项目时,我意识到程序没有找到任何打开的 com 端口。它不会进入 foreach 循环,只是 System.IO.Ports.SerialPort.GetPortNames() 不会 return 任何端口名称。 我做了一些研究,并在 windows 10 中阅读了类似这种情况的问题。 人们给出了关于串行连接的完全不同的解决方案。 我不想重写整个项目。那么有没有人知道这个问题?有什么简单的解决方案吗?

您确定升级到Windows10后串口本身工作正常吗?

  • 它是否出现在设备管理器中?
  • 它是否出现在 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM 下的注册表中(这是 SerialPort.GetPortNames() 获取其信息的地方)?

有趣的是,我维护的软件使用 SerialPort.GetPortNames() 来枚举串口,它在 Windows 10.

上运行良好

这是一个旧话题,但由于它没有解决,而且我刚刚在一台新的 Win10 笔记本电脑上遇到了同样的问题,我想我应该分享我的解决方案。我终于发现我必须从 Silicon Labs 下载 VCP 驱动程序,并且在我 运行 x64 安装程序之后一切正常。 我不认为我必须在我的 Win7 笔记本电脑上执行此操作,所以这是 Win10 的不便。

Мy 问题 (Win10) 是当从 USB 中删除设备时,相应的端口不会从列表中消失 (SerialPort.GetPortNames(), C#) 它甚至留在寄存器中。 我看到了:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]
"\Device\USBSER000"="COM11"
"\Device\USBSER002"="COM53"
"\Device\VCP0"="COM4"
"\Device\USBSER001"="COM11"

我知道问题是什么时候发生的,但我不知道如何绕过它:当我占用端口并从USB关闭设备时,端口名称保留在寄存器和[=17的列表中=] returns。