![Диспетчер очереди печати Windows 7 блокирует последовательные порты даже при остановке](https://rvso.com/image/593925/%D0%94%D0%B8%D1%81%D0%BF%D0%B5%D1%82%D1%87%D0%B5%D1%80%20%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B8%20Windows%207%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D1%83%D0%B5%D1%82%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D0%BE%D1%80%D1%82%D1%8B%20%D0%B4%D0%B0%D0%B6%D0%B5%20%D0%BF%D1%80%D0%B8%20%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5.png)
У меня есть программа (среда — Windows 7 Enterprise 32bit), которая сканирует доступные последовательные порты для обнаружения определенного устройства.
Но на многих машинах драйвер принтера настроен на один из последовательных портов (это не означает, что к этому порту на самом деле подключен принтер). В этом случае моя программа сканирования не может открыть этот порт для поиска устройства.
В Windows XP остановки спулера перед запуском сканирования было достаточно, чтобы разблокировать последовательные порты, выделенные драйверами принтера. В Windows 7 это больше не работает. Если у меня есть принтер, настроенный на COMx, и я останавливаю спулер, COMx не может быть открыт.
Я проверил блокировки процессов с помощьюProcExp: результаты портов, выделенные процессом spoolsv.exe при работе спулера, и результаты, НЕ выделенные никем, когда спулер остановлен.
Есть идеи, как на время разблокировать порты, выделенные принтерам?
Обходной путь, который я нашел, — изменить порт каждого последовательного принтера на FILE: перед сканированием и обратно на COMx после завершения сканирования, но мне интересно, есть ли более простое решение.
решение1
У меня была похожая проблема, которая была решена путем изменения имени порта с COM1 на COM4 в дополнительных свойствах последовательного порта (через диспетчер устройств).
Все заработало нормально. Некоторые программы по-прежнему видят переименованный порт как COM1, но теперь они могут получить к нему доступ.