C# SerialPort GetPortNames не работает на Windows 10

Я сделал простую программу один или два года назад в Windows 8 или Windows 8.1, которая обеспечивает соединение через последовательный порт между Arduino Uno и моим C# Form Application. Во-первых, я проверяю все открытые 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. И люди предлагают совершенно разные решения о последовательных соединениях. Я не хочу переписывать весь проект. Так кто-нибудь знает что-нибудь об этой проблеме? Есть ли простое решение для этого?

2 ответа

Решение

Вы уверены, что сам последовательный порт работает правильно после обновления до Windows 10?

  • Это появляется в диспетчере устройств?
  • Это появляется в реестре под HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM (где SerialPort.GetPortNames() получает информацию)?

Кстати, я поддерживаю программное обеспечение, которое использует SerialPort.GetPortNames() для перечисления последовательных портов, и оно отлично работает в Windows 10.

Это старая тема, но так как она не была решена, и поскольку я только что столкнулся с этой же проблемой на новом ноутбуке с Win10, я решил поделиться своим решением. Наконец-то я понял, что мне нужно скачать драйвер VCP от Silicon Labs, и после запуска установщика x64 все заработало. Я не думаю, что мне нужно было делать это на моем ноутбуке Win7, так что это неудобство для Win10.

Моя проблема (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.

Другие вопросы по тегам