И снова о принтерах HP LJ серии 1018, 1020 и аналогичных
Проблема:
У некоторых принтеров HP LaserJet (обычно, это простенькие персональные принтеры, подключаемые по USB типа HPLJ 1018 и HP LJ 1020) существует проблема, связанная, скорее всего, с ошибкой драйверов.
Проблема такая: при постановке на печать некоторых документов иногда происходит зависание (непредвиденная остановка) службы печати (spooler).
При этом, обычное отключение и включение принтера, очистка очереди печати и прочие манипуляции не помогают. Не всегда помогает даже полная перезагрузка компьютера.
Решение:
Самым действенным показал себя следующий метод:
-
Выключаем принтер
-
Останавливаем службу печати
Код: Выделить всё
net stop spooler
-
Очищаем файлы очереди принтера (все файлы с расширением shd и spl из папки %systemroot%\system32\spool\printers):
Код: Выделить всё
del %systemroot%\system32\spool\printers\*.shd del %systemroot%\system32\spool\printers\*.spl
При необходимости, устанавливаем права на папку %systemroot%\system32\spool\printers:
Код: Выделить всё
cacls %systemroot%\system32\spool\printers /E /C /G Администраторы:F
-
Запускаем службу печати:
Код: Выделить всё
net start spooler
После этого принтер должен вновь нормально работать. Однако!!!, встречаются такие документы, которые при печати на вышеназванные принтеры HP LaserJet вызывают ошибку КАЖДЫЙ РАЗ. Такие документы нужно печатать на альтернативных (дополнительных) принтерах, подключенных к компьютеру. Как вариант - можно распечатать их на виртуальный принтер, а затем, этот преобразованный документ уже можно отправлять на реальный принтер HP LJ.
Для автоматизации очистки очереди и перезапуска службы печати можно пользоваться следующим ПО:
-
MicrosoftFixit-portable. Зеркало:
-
MicrosoftFixit.Printing.Run. Зеркало:
-
Командным файлом:
Код: Выделить всё
@Echo Off net stop spooler cacls %systemroot%\system32\spool\printers /E /C /G Ђ¤¬ЁЁбва в®ал:F del %systemroot%\system32\spool\printers\*.shd del %systemroot%\system32\spool\printers\*.spl net start spooler
Перед выполнением файла необходимо отключить принтер, а после окончания выполнения - включить.
Скачать этот файл:
Для Windows 7 и Vista:
Этот скрипт необходимо запускать от имени администратора!!!
-
Слегка доработанным скриптом VBS (Visual Basic Script) от автора Hellsman:
Код: Выделить всё
Option Explicit Dim WshShell Dim objFSO Dim strComputer Dim objWMIService Dim colServiceList, objService, errReturn strComputer = "." MsgBox "Отключите проблемный принтер",0,"Внимание!!!" Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colServiceList = objWMIService.ExecQuery("Associators of " _ & "{Win32_Service.Name='Spooler'} Where " _ & "AssocClass=Win32_DependentService " & "Role=Antecedent" ) For each objService in colServiceList objService.StopService() Next Wscript.Sleep 20000 Set colServiceList = objWMIService.ExecQuery _ ("Select * from Win32_Service where Name='Spooler'") For each objService in colServiceList errReturn = objService.StopService() Next Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") set WshShell = WScript.CreateObject("WScript.Shell") REM WshShell.Run "xcacls " & objFSO.GetFolder(objFSO.GetSpecialFolder(0) & "\system32\spool\PRINTERS\") & " /T /E /G Администраторы:F" WshShell.Run "cacls " & objFSO.GetFolder(objFSO.GetSpecialFolder(0) & "\system32\spool\PRINTERS\") & " /E /C /G Администраторы:F" REM WshShell.Run "cacls " & objFSO.GetFolder(objFSO.GetSpecialFolder(0) & "\system32\spool\PRINTERS\") & " /E /C /G Administrators:F" RecourseDeleteByMask objFSO.GetFolder(objFSO.GetSpecialFolder(0) & "\system32\spool\PRINTERS\"), "*.*" Set objFSO = Nothing Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colServiceList = objWMIService.ExecQuery _ ("Select * from Win32_Service where Name='Spooler'") For each objService in colServiceList errReturn = objService.StartService() Next Wscript.Sleep 20000 Set colServiceList = objWMIService.ExecQuery("Associators of " _ & "{Win32_Service.Name='Spooler'} Where " _ & "AssocClass=Win32_DependentService " & "Role=Dependent" ) For each objService in colServiceList objService.StartService() Next WScript.Echo "Служба очереди печати перезапущена, нажмите OK" MsgBox "Включите принтер",0,"Можно печатать" WScript.Quit 0 '================================================ Sub RecourseDeleteByMask(objFolder, strMask) Dim objSubFolder Dim strFullMask 'WScript.Echo objFolder.Path Выводим путь обрабатываемой папки (для отладки; имеет смысл за комментировать). strFullMask = objFSO.BuildPath(objFolder.Path, strMask) ' Строим полный путь. objFSO.DeleteFile strFullMask, True ' Удаляем файлы по маске. On Error Resume Next ' Обрабатываем ошибки, возможные в случае, когда нет доступа к содержимому папки(пример - «System Volume Information». For Each objSubFolder In objFolder.SubFolders If Err.Number = 0 Then ' Удалось получить доступ к содержимому папки? RecourseDeleteByMask objSubFolder, strMask ' Вызываем процедуру для каждой из под папок. Else ' Если не удалось — Err.Clear' сбрасываем состояние ошибки и движемся дальше. 'WScript.Echo "Can't enumerate subfolders for folder [" & objFolder.Path & "]." End If Next On Error Goto 0 ' Восстанавливаем стандартную обработку ошибок End Sub
Скачать этот скрипт:
Для Windows 7 и Vista:
Этот скрипт необходимо запускать от имени администратора!!!
Для этого создаем ярлык для объекта "%SystemRoot%\System32\wscript.exe", в параметрах запуска которого указываем полный путь к скачанному скрипту VBS, например: "%UserProfile%\Desktop\ClearSpooler.vbs" чтобы получилось как-то так:Нажимаем кнопку "Дополнительно" устанавливаем галочку "Запуск от имени администратора" и сохраняем измененные параметры:
Дополнения:
-
Microsoft: Отмена печати или удаление задания из очереди печати в Windows XP
-
В командном файле можно включить дополнительную проверку наличия файлов заданий на печать в папке очереди:
Код: Выделить всё
IF EXIST "%SystemRoot%\System32\spool\PRINTERS\" del "%SystemRoot%\System32\spool\PRINTERS\*.*" /f /s /q
-
Для управление принтерами, очередями печати, заданиями и пр. из командной строки и исполняемых файлов, в папке "%SystemRoot%\System32" существуют скрипты:
-
Prnjobs.vbs - Приостанавливает, возобновляет, отменяет и перечисляет задания печати
-
Prnmngr.vbs - Добавляет, удаляет и составляет список принтеров или подключений принтеров в дополнение к настройкам и выводу принтера, заданного по умолчанию
Prnport.vbs - Создает, удаляет и составляет список стандартных TCP/IP-портов принтера в дополнение к выводу на экран и изменению настроек порта
-
Prndrvr.vbs - Добавляет, удаляет и составляет списки драйверов
-
Prnqctl.vbs - Печатает пробную страницу, приостанавливает или возобновляет печать на принтере и чистит очередь принтера