Ошибка 0x0000007e при подключении сетевого принтера в Windows 7

Вчера еще прокачал свой скилл на предмет борьбы с Windows. При установке сетевого принтера HP LaserJet 4250 столкнулся с ошибкой следующего рода, операционная система нашла соответствующие драйвера, но на финальном этапе, аля finishing,  выскочило сообщение:

Ошибка 0x0000007e

В Google сразу нашелся ответ на предмет данной ошибки, да, де она есть, освещена в базе знаний компании Microsoft. Правда везде говорилось о том, что ошибка возникает в Windows 7 64 bit, однако у меня была 32-битная система. Но не суть дело, в базе знаний патч был и для x86.

Однако, его установка не решила проблему. Хороший однако патч, полезный :)

Решение оказалось нетривиальным и  нашлось тут:

  1. Откройте Пуск -> Устройства и принтеры -> «Установка принтера».
  2. В появившемся окне выберите «Добавить локальный принтер».
  3. Далее выберите «Создать новый порт». Тип порта — Local Port.
  4. Нажимаем «Далее». В окне «Имя порта» в текстовом поле необходимо ввести адрес принтера в таком виде ||Computer-name|Printer-share-name, где Computer-name — NETBios имя компьютера к которому подключен принтер, Printer-share-name — сетевое имя принтера. Обратите внимание, что вместо косой черты — \ необходимо вводить вертикальную — | (в моем случае это все же были обычные слэши). Если после нажатия на Ок, вы получаете ошибку «Сетевой путь не найден», значит в адресе где-то присутствует ошибка или опечатка. В этом случае, чтобы не мучиться, можно прямо из сетевого окружения перетащить ярлык принтера к себе на рабочий стол, открыть его свойства и скопировать путь к принтеру.
  5. Далее, если все правильно, появится стандартный диалог установки драйвера принтера. Мой драйвер корректно установился автоматически, но, как советует автор, в некоторых случаях необходимо предварительно скачать файлы драйвера, распаковать их и выбрать установку из указанного места.

После выполнения этих действий драйвер нормально установился, принтер ожил, засверкал своими диодами и довольно заурчал валиком.

Обновление 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.

После первичной диагностики проблемы на разных системах пришли к выводу, что ошибка 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 .Принт-сервер x86 и x64 версии драйвера HP Universal Printing PCL 6

Покопавшись на форумах HP и Technet-а, удалось найти информацию,  что в настройках универсального драйвера печати HP используется путь к файлу очереди печати для 32-битной системы (spool\drivers\w32x86\3), который  64-битный клиент найти не может, вследствие чего и появляется ошибка установки 0x0000007e. Путь к файлу указывается в параметрах принтера на принт сервере. В нашем примере это был файл  spool\DRIVERS\W32X86\3\hpcpn112.dll, но в общем случае конкретный файл библиотеки зависит от используемой версии универсального драйвера печати HP.

Чтобы решить эту проблему на 32 битном сервере печати нужно:

  1. Открыть редактор реестра (regedit.exe)
  2. Перейти в ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\ и развернуть ветку с именем принтера (в нашем примере это HP Color LaserJet 5550 PCL 6)Ветка реестра bidi в параметрах общего сетевого принтера HP
  3. В кусте, относящемуся к проблемному принтеру нужно в разделе CopyFiles удалить ветку BIDI.
    Примечание.  В продуктивной среде рекомендуется предварительно экспортировать в отдельный reg файл параметры удаляемой ветки. В это случае всегда можно будет откатиться к первоначальным настройкам.
  4. Перезапустите диспетчер печати (spooler) на клиенте


    Перезапуск диспетчера печати
  5. Попробуйте на клиенте еще раз подключить принтер HP. Он должен установиться без ошибок.
    Примечание. К слову говоря, после всех манипуляций проблем с установкой принтеров на 32 битных клиентов не наблюдалось.