Ошибка 0x0000007e при подключении сетевого принтера встречается довольно часто как в Windows 10, так и Windows 7. В большинстве случае она наблюдается, когда принтер напрямую подключен к другому компьютеру с Windows (принт-серверу) и к нему открыт общий сетевой доступ.
В моем случае ошибка появилась в следующей конфигурации. Имеется сервер печати на 32 битной версии Windows Server 2008 на котором настроены несколько общих (расшаренных) принтеров Hewlett-Packard. При попытке подключить любой принтер с этого сервера на компьютере с 64 битной Windows 10 или Windows 7, операционная система успешно скачивает с принт-сервера нужную версию драйвера принтера HP, но при попытке его установить возникает ошибка 0x0000007e.
В Windows 7 ошибка подключения сетевого принтера выглядит так:
Operation failed with error 0x0000007e.
В русской версии ОС:
Подключение к принтеру
Windows не удается подключить к принтеру.
В ходе операции произошла ошибка 0x0000007e.
На компьютерах с Windows 10 ошибка подключения принтера выглядит немного по-другому:
The specified module could not be found.
При этом проблем с подключением и установкой сетевых принтеров с принт-сервера на 32 битных редакциях Windows нет.
После диагностики проблемы на разных версиях Windows, я пришел к выводу, что ошибка 0x0000007e наблюдается только на 64 битных клиентах при попытке подключить общий сетевой принтер Hewlett Packard, установленный на 32 битном принт-сервере (под управлением как на Windows Server 2003 x86, так и Windows Server 2008 x86). Что характерно, проблема возникает не со всеми принтерами HP, а только с теми, которые, используют универсальный драйвер печати HP PCL (HP Universal Print driver).
Что нужно сделать, чтобы исправить ошибку? В первую очередь нужно проверить, что на сервере печати установлены как 32-х так и 64-х битные версии драйвера принтера. Как мы видим, установлены x64 и x86 версии драйвера HP Universal Printing PCL 6.
Покопавшись на форумах HP и Technet-а, мне удалось найти информацию, что в настройках универсального драйвера печати HP используется фиксированный путь к файлу очереди печати для 32-битной системы (spool\drivers\w32x86\3), который 64-битный клиент найти не может, вследствие чего и появляется ошибка установки 0x0000007e. Путь к файлу указывается в параметрах принтера на принт-сервере. В нашем примере это был файл spool\DRIVERS\W32X86\3\hpcpn112.dll, но в общем случае конкретный файл библиотеки зависит от используемой версии универсального драйвера печати HP. Т.е. 32 битная версия драйвера печати HP Universal Printing оказалась несовместима с x64 версиями Windows. Но это можно исправить вручную.
Итак, чтобы решить эту проблему нужно на сервере-печати (компьютере), к которому подключен принтер и через который предоставляется общий доступ нужно удалить поврежденный (некорректный) ключ реестра драйвера печати HP:
- Открыть редактор реестра (regedit.exe).
- Перейти в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\ и развернуть ветку с именем принтера (в нашем примере это HP Color LaserJet 5550 PCL 6).
- В ветке реестра, которая относится к проблемному принтеру нужно в разделе CopyFiles удалить ветку BIDI целиком.Примечание. В продуктивной среде рекомендуется предварительно экспортировать в отдельный reg файл параметры удаляемой ветки. В это случае всегда можно будет откатиться к первоначальным настройкам.
- Перезапустите диспетчер печати (Print spooler) на клиенте:
net stop spooler
net start spooler
- После удаления ветки реестра BIDI на сервере, попробуйте на клиенте Windows 10 еще раз подключить сетевой принтер HP. Он должен успешно установиться без ошибок.
В том случае, если этот вариант не сработал, или у вас ошибка 0x0000007e появляется при подключении принтеров других производителей (не HP), в качестве обходного решения можно попытаться подключить принтер через локальный порт. Вот как это сделать:
- Через панель управления добавьте в систему новый (локальный!!!) принтер (Добавить локальный или сетевой принтер с параметрами, заданными вручную).
- Укажите, что нужно создать новый локальный порт (тип порта Local Port).
- В качестве имени порта нужно указать полный UNC путь к сетевому принтеру. Например, если имя компьютера, к которому подключен принтер — OfficePC1, а имя принтера с общим доступом на нем Xerox3320, то UNC адрес этого принтера будет выглядеть так:
\\OfficePC1\Xerox3320
, либо можно указывать IP адрес компьютера вместо имени\\192.168.1.100\Xerox3320
. - После этого осталось выбрать (или установить) подходящий драйвер принтера.
Есть еще один похожий вариант подключения такого сетевого принтера.
- Удалите драйвер подключаемого принтера из локального репозитория. Свойства сервера печати -> вкладка Драйверы -> выберите драйвер (как 32 так, и 64 битный) и нажмите кнопку Удалить (Remove).
- Сначала создается локальный принтер с подключением через новый порт lpt.
- Затем с помощью команды создается постоянное сопоставление данного виртуального LPT порта с UNC адресом сетевого принтера:
net use LPT2 \\OfficePC1\Xerox3320 /persistent:yes