У меня есть программа (среда - Windows 7 Enterprise 32bit), которая сканирует доступные последовательные порты для обнаружения конкретного устройства.
Но на многих машинах драйвер принтера настроен на один из последовательных портов (это не означает, что к этому порту действительно подключен принтер). В этом случае моя программа сканирования не может открыть этот порт для поиска устройства.
В Windows XP остановки диспетчера очереди печати перед запуском сканирования было достаточно для разблокировки последовательных портов, выделенных драйверами принтера. В Windows 7 это больше не работает. Если у меня есть принтер, настроенный на COMx, и я останавливаю диспетчер очереди печати, COMx не открывается.
Я проверил блокировки процессов с помощью ProcExp: портирует результаты, выделенные процессом spoolsv.exe, когда диспетчер очереди печати, и результаты, НЕ выделенные никем, когда диспетчер очереди печати.
Есть идеи, как на мгновение разблокировать порты, выделенные принтерами?
Обходной путь, который я нашел, - это изменить порт каждого последовательного принтера на FILE: перед сканированием и обратно на COMx, когда сканирование завершится, но мне интересно, есть ли более простое решение.
У меня была аналогичная проблема, которая была решена путем изменения имени порта с COM1 на COM4 в дополнительных свойствах последовательного порта (через диспетчер устройств).
Потом все заработало. Некоторые программы по-прежнему видят переименованный порт как COM1, но теперь они могут получить к нему доступ.