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.