Ошибка 0x0000007e при подключении сетевого принтера встречается довольно часто как в Windows 10, так и Windows 7. В большинстве случае она наблюдается, когда принтер напрямую подключен к другому компьютеру с Windows (принт-серверу) и к нему открыт общий сетевой доступ.
В моем случае ошибка появилась в следующей конфигурации. Имеется сервер печати на 32 битной версии Windows Server 2008 на котором настроены несколько общих (расшаренных) принтеров Hewlett-Packard. При попытке подключить любой принтер с этого сервера на компьютере с 64 битной Windows 10 или Windows 7, операционная система успешно скачивает с принт-сервера нужную версию драйвера принтера HP, но при попытке его установить возникает ошибка 0x0000007e.
В Windows 7 ошибка подключения сетевого принтера выглядит так:
В русской версии ОС:
При этом проблем с подключением и установкой сетевых принтеров с принт-сервера на 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-битной системы (spooldriversw32x863), который 64-битный клиент найти не может, вследствие чего и появляется ошибка установки 0x0000007e. Путь к файлу указывается в параметрах принтера на принт-сервере. В нашем примере это был файл spoolDRIVERSW32X863hpcpn112.dll, но в общем случае конкретный файл библиотеки зависит от используемой версии универсального драйвера печати HP. Т.е. 32 битная версия драйвера печати HP Universal Printing оказалась несовместима с x64 версиями Windows. Но это можно исправить вручную.
Итак, чтобы решить эту проблему нужно на сервере-печати (компьютере), к которому подключен принтер и через который предоставляется общий доступ нужно удалить поврежденный (некорректный) ключ реестра драйвера печати HP:
- Открыть редактор реестра (regedit.exe).
- Перейти в ветку HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPrintPrinters и развернуть ветку с именем принтера (в нашем примере это HP Color LaserJet 5550 PCL 6).
- После удаления ветки реестра BIDI на сервере, попробуйте на клиенте Windows 10 еще раз подключить сетевой принтер HP. Он должен успешно установиться без ошибок.
- Через панель управления добавьте в систему новый (локальный. ) принтер (Добавить локальный или сетевой принтер с параметрами, заданными вручную).
- Укажите, что нужно создать новый локальный порт (тип порта Local Port).
- В качестве имени порта нужно указать полный UNC путь к сетевому принтеру. Например, если имя компьютера, к которому подключен принтер — OfficePC1, а имя принтера с общим доступом на нем Xerox3320, то UNC адрес этого принтера будет выглядеть так: \OfficePC1Xerox3320 , либо можно указывать IP адрес компьютера вместо имени \192.168.1.100Xerox3320 .
- После этого осталось выбрать (или установить) подходящий драйвер принтера.
- Удалите драйвер подключаемого принтера из локального репозитория. Свойства сервера печати -> вкладка Драйверы -> выберите драйвер (как 32 так, и 64 битный) и нажмите кнопку Удалить (Remove).
- Сначала создается локальный принтер с подключением через новый порт lpt.
- Затем с помощью команды создается постоянное сопоставление данного виртуального LPT порта с UNC адресом сетевого принтера: net use LPT2 \OfficePC1Xerox3320 /persistent:yes
- Откройте Пуск -> Устройства и принтеры -> «Установка принтера».
- В появившемся окне выберите «Добавить локальный принтер».
- Далее выберите «Создать новый порт». Тип порта — Local Port.
- Нажимаем «Далее». В окне «Имя порта» в текстовом поле необходимо ввести адрес принтера в таком виде ||Computer-name|Printer-share-name, где Computer-name — NETBios имя компьютера к которому подключен принтер, Printer-share-name — сетевое имя принтера. Обратите внимание, что вместо косой черты — необходимо вводить вертикальную — | (в моем случае это все же были обычные слэши). Если после нажатия на Ок, вы получаете ошибку «Сетевой путь не найден», значит в адресе где-то присутствует ошибка или опечатка. В этом случае, чтобы не мучиться, можно прямо из сетевого окружения перетащить ярлык принтера к себе на рабочий стол, открыть его свойства и скопировать путь к принтеру.
- Далее, если все правильно, появится стандартный диалог установки драйвера принтера. Мой драйвер корректно установился автоматически, но, как советует автор, в некоторых случаях необходимо предварительно скачать файлы драйвера, распаковать их и выбрать установку из указанного места.
- Открыть редактор реестра (regedit.exe)
- Перейти в ветку HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPrintPrinters и развернуть ветку с именем принтера (в нашем примере это HP Color LaserJet 5550 PCL 6)
Как исправить ошибку 0x0000007e?
Итак, сперва нужно проверить, установлены ли драйвера, как для 32-х, так и для 64-х битных версий. Если все так, то это должно выглядеть примерно следующим образом:
Также, после длительного исследования, выяснилось, что драйвер печати принтера использует путь 32-х битной версии, а именно spooldrivers w32x643. Поэтому, когда мы пытаемся установить драйвер на 64-х разрядной версии клиента, то он попросту не может определить этот путь и появляется ошибка 0x0000007e. Путь к файлу можно указать вручную в параметрах принтера, но у каждой версии драйвера файл, да и путь могут различаться.
Сейчас мы попробуем решить проблему с помощью реестра. (Для 32-битных версий).
- Откройте редактор реестра. Для этого нажмите клавиши Win+R и введите туда фразу regedit.
- Нужно перейти в следующую ветку реестра: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPrintPrinters. Находите там свой принтер и развертываете ветку.
- В данной ветке должна находится папка CopyFiles, которую вы также открываете и удаляете оттуда ветку BIDI.
Дополнительно. Чтобы не было проблем с принтером или самой операционной системой после удаления каких-то веток, предварительно, необходимо сделать резервную копию этой ветки. - Теперь нужно перезагрузить диспетчер печати. В этом случае, в командной строке необходимо по порядку выполнить две команды:
net stop spooler net start spooler
- Теперь, снова пробуйте подключить проблемный принтер к компьютеру и установить драйвера. В этот раз все должно пройти успешно.
В том случае, если этот вариант не сработал, или у вас ошибка 0x0000007e появляется при подключении принтеров других производителей (не HP), в качестве обходного решения можно попытаться подключить принтер через локальный порт. Вот как это сделать:
Есть еще один похожий вариант подключения такого сетевого принтера.
Вчера еще прокачал свой скилл на предмет борьбы с Windows. При установке сетевого принтера HP LaserJet 4250 столкнулся с ошибкой следующего рода, операционная система нашла соответствующие драйвера, но на финальном этапе, аля finishing, выскочило сообщение:
В Google сразу нашелся ответ на предмет данной ошибки, да, де она есть, освещена в базе знаний компании Microsoft. Правда везде говорилось о том, что ошибка возникает в Windows 7 64 bit, однако у меня была 32-битная система. Но не суть дело, в базе знаний патч был и для x86.
Однако, его установка не решила проблему. Хороший однако патч, полезный
Решение оказалось нетривиальным и нашлось тут:
После выполнения этих действий драйвер нормально установился, принтер ожил, засверкал своими диодами и довольно заурчал валиком.
Обновление 1. По материалам http://winitpro.ru/index.php/2014/07/09/oshibka-0x0000007e-pri-podklyuchenii-printera-hp-na-windows-7-x64/ Это решение корректнее, и после того как я опробовал это на паре рабочих станций я решил, что дополнить статью этим обновлением будет важно.
Итак, проблема возникает, при следующих условиях:
Имеется сервер печати на 32 битной версии Windows (Windows Server 2003) на котором настроены несколько общих (расшаренных) принтеров HP. При попытке подключить принтер с этого сервера на 64 битном клиенте, клиент скачивает с принт-сервера нужную версию драйвера, но при попытке его установить возникает ошибка 0x0000007e.
В первую очередь нужно проверить, что на сервере печати установлены как 32-х так и 64-х битные версии драйвера. Как мы видим, установлены x64 и x86 версии драйвера HP Universal Printing PCL 6 .
Покопавшись на форумах HP и Technet-а, удалось найти информацию, что в настройках универсального драйвера печати HP используется путь к файлу очереди печати для 32-битной системы (spooldriversw32x863), который 64-битный клиент найти не может, вследствие чего и появляется ошибка установки 0x0000007e. Путь к файлу указывается в параметрах принтера на принт сервере. В нашем примере это был файл spoolDRIVERSW32X863hpcpn112.dll, но в общем случае конкретный файл библиотеки зависит от используемой версии универсального драйвера печати HP.
Чтобы решить эту проблему на 32 битном сервере печати нужно: