代码之家  ›  专栏  ›  技术社区  ›  Ardahan Kisbet

C#SerialPort GetPortNames在windows 10上不工作

  •  2
  • Ardahan Kisbet  · 技术社区  · 10 年前

    一两年前,我在windows 8或windows 8.1中制作了一个简单的程序,在Arduino Uno和我的C#窗体应用程序之间提供串行端口连接。首先,我检查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()不返回任何端口名。 我做了一些研究,在windows 10中读到了这样一个问题。 人们对串行连接给出了完全不同的解决方案。 我不想重写整个项目。那么有人知道这个问题吗?有什么简单的解决方案吗?

    3 回复  |  直到 10 年前
        1
  •  0
  •   Matthew Xavier    9 年前

    升级到Windows 10后,您确定串行端口本身工作正常吗?

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

    有趣的是,我维护的软件使用SerialPort。GetPortNames()枚举串行端口,它在Windows 10上运行良好。

        2
  •  0
  •   jpc2112    8 年前

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

        3
  •  0
  •   NikB    6 年前

    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关闭设备时,端口名会保留在寄存器和Windows返回的列表中。 enter image description here