Если принтер «завис», задания не удаляются, а после перезапуска ПК печатается всё, что было послано на печать…

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

Решение первое — быстрое, рабочее, не требующее калорий для обдумывания и осуществления:

  1. Создаем файл с говорящим названием, например cleanspool.cmd (название может быть любым)
  2. Помещаем в него следующий текст:
    net stop spooler
    del /F /S /Q %systemroot%\system32\spool\printers\*.*
    net start spooler
    net stop spooler
    del /F /S /Q %systemroot%\system32\spool\printers\*.*
    net start spooler
  3. Запускаем (с правами Администратора), ждем 30-60 секунд (до закрытия окна)
  4. Радуемся очищенной очереди печати ВСЕХ принтеров

Дабы минимизировать расход калорий, файл можно скачать (CMD, 184B) в готовом виде. Данный файл можно поместить в автозагрузку и тогда есть шанс, что принтер не станет «вспоминать» о невыполненных заданиях каждый раз. Если пользователь не залогинился сразу, либо случилось так, что очередь до запуска скрипта не сразу дошла, принтер таки успеет что-то напечатать.

Решение второе — обстоятельное, требующее навыков, без описания деталей:

Если немного проанализировать код скрипта из первого способа, становится понятно что мы два раза подряд останавливаем службу очереди печати, очищаем некую директорию и запускаем службу вновь. Обычно, рекомендуется делать эту процедуру однократно, но у меня почему-то из пары файлов задания SPL и SHD, удаляется только один, до второго нет доступа/прав. А при повторном удалении удаляется и второй. Ключи /F /S /Q возможно излишни, но это привычка.

У данного способа есть один минус, не общий, но серьезный — чистится очередь печати ВСЕХ принтеров, иногда это неприемлемо. Для решения проблемы можно разнести директории очереди печати для разных принтеров. Делается это так:

  1. Создаем директории для очереди печати принтеров, например, c:\spool\aculaser4000, c:\spool\xerox1118, c:\spool\samsung3310 (это мои принтеры и мои пути, они естественно не абсолютны).
  2. Запускаем редактор реестра
  3. В редакторе реестра ищем раздел
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\ИМЯ_ПРИНТЕРА]
  4. Меняем значение параметра SpoolDirectory на путь к папке, которую мы создали, например, c:\spool\ИМЯ_ПРИНТЕРА
  5. Меняем значения указанного параметра у остальных принтеров
  6. Закрываем редактор реестра
  7. Если необходимо изменить директорию очереди печати для всех принтеров, нужно поработать с параметром DefaultSpoolDirectory, находящимся по адресу:
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers]
  8. Если захочется всё вернуть «как было», значение параметра нужно изменить на %systemroot%\system32\spool\printers или оставить пустым, несли не менялся путь в предыдущем пункте

Содержание CMD файла естественно немного изменится, думаю, не нужно объяснять как.

Чисто теоретически, службе печати можно установить тип запуска вручную и запускать её подобным методом из logon-скриптов, предварительно очистив очередь.

Запись опубликована в рубрике Программки с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *