Почему зависает 1С:Предприятие при потере фокуса или закрытии и как это связано с процессом Print driver host for application?

Системный администратор 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Каждый системный администратор или опытный пользователь 1С рано или поздно сталкивается с загадочным поведением программы: база данных работает стабильно, но стоит переключиться на другое окно (потерять фокус приложения) или попытаться закрыть программу, как интерфейс полностью зависает и перестает отвечать на любые действия. В Диспетчере задач Windows при этом можно заметить появление процесса Print driver host for application (исполняемый файл splwow64.exe), который «прицепляется» к группе процессов 1cv8 (32 бита).

Особенно остро эта проблема проявляется на рабочих станциях со слабыми или энергоэффективными процессорами (например, линейки AMD A6, Intel Atom или Celeron). На более производительных компьютерах (например, с процессорами Intel Core i3/i5 или AMD Ryzen) конфликт проявляется мягче — кратковременным «залипанием» программы на 1–2 минуты при закрытии, после чего окно всё-таки исчезает. В этой статье мы подробно разберем причины возникновения данной коллизии и рассмотрим эффективные практические методы ее решения.

Выясняем причину: почему подсистема печати блокирует 1С

Для начала проанализируем архитектуру взаимодействия приложений в операционной системе Windows. Процесс splwow64.exe (Thunking Spooler APIS) является официальным системным транслятором Microsoft. Его единственная задача — позволить устаревшим 32-разрядным приложениям (каковым и является 32-битный толстый или тонкий клиент 1С) отправлять документы на печать через современные 64-разрядные драйверы принтеров.

Каждый раз, когда в 1С происходит переключение фокуса, открытие диалоговых окон, подготовка печатных форм или попытка корректного закрытия программы, платформа обращается к операционной системе с запросом на получение списка доступных принтеров и их текущего статуса (так называемая энумерация устройств). В этот момент происходит следующее:

  1. 32-битный клиент 1С отправляет запрос подсистеме печати.
  2. Операционная система запускает транслятор splwow64.exe для связи с 64-битными драйверами.
  3. Если в системе есть недоступный сетевой принтер, зависший виртуальный принтер или поврежденный драйвер устройства, процесс splwow64.exe уходит в состояние длительного ожидания ответа (таймаут).
  4. Поток выполнения 1С, который ожидает завершения опроса принтеров, полностью блокируется ОС. На слабых процессорах вроде AMD A6 это вызывает мгновенную и глухую блокировку всего интерфейса программы.

Ниже мы подробно разберем несколько способов устранения этой проблемы — от простых организационных мер до глубокой настройки операционной системы Windows.

Решение 1. Переход на 64-битный клиент 1С (рекомендуемый способ)

Наиболее надежный и современный метод избавиться от зависаний раз и навсегда — исключить саму необходимость использования транслятора splwow64.exe. Для этого нам потребуется перевести рабочую станцию на использование 64-разрядного клиента 1С:Предприятие.

Поскольку и операционная система Windows, и драйверы принтеров в 99% случаев сейчас являются 64-разрядными, 64-битное приложение 1С будет общаться с подсистемой печати напрямую, без посредников. Это полностью нивелирует конфликт и разгрузит процессор.

Выполним переход по шагам:

  1. Определим разрядность установленной операционной системы Windows (она должна быть 64-разрядной).
  2. Скачаем с портала технологической поддержки 1С дистрибутив тонкого или толстого клиента соответствующей версии с пометкой «для Windows 64-bit» (имя архива обычно содержит windows64).
  3. Произведем установку новой платформы на компьютер пользователя.
  4. В настройках запуска информационных баз в окне запуска 1С (кнопка «Изменить» — далее «Параметры запуска») в поле «Разрядность» принудительно укажем значение «64 (x64)» вместо значения «По умолчанию».

После запуска 64-битной версии 1С обратите внимание на Диспетчер задач. Процесс splwow64.exe больше не будет появляться при активности программы, а интерфейс перестанет зависать.

Решение 2. Тонкая настройка таймаутов в реестре Windows

Если по каким-то технологическим причинам (например, из-за использования специфических внешних компонент или старых драйверов торгового оборудования, работающих только в 32-битном окружении) вы вынуждены оставить 32-разрядный клиент 1С, проблему можно решить путем изменения параметров работы процесса splwow64.exe в системном реестре.

По умолчанию служба трансляции печати остается активной в оперативной памяти компьютера в течение нескольких минут после последнего обращения к принтеру. Это сделано для того, чтобы не тратить ресурсы на повторный запуск процесса при частой печати. Однако именно это поведение не позволяет 1С корректно закрыться или переключить контекст. Мы можем заставить Windows мгновенно выгружать этот процесс.

Шаг 1. Уменьшение времени ожидания процесса (таймаута)

Откроем редактор реестра (сочетание клавиш Win + R, ввести regedit) и перейдем по следующему пути:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

В этом разделе нам необходимо создать новый параметр типа DWORD (32 бита). Присвоим ему имя SplWOW64TimeOut (в зависимости от версии Windows может также потребоваться дублирующий параметр SplWOW64TimeOutSeconds). Установим его значение равным 1 в десятичной системе исчисления. Это заставит систему завершать процесс splwow64.exe практически сразу после завершения задания печати.

Для автоматизации этой настройки мы можем создать текстовый файл с расширением .reg следующего содержания и запустить его от имени администратора:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print]
"SplWOW64TimeOut"=dword:00000001
"SplWOW64TimeOutSeconds"=dword:00000001

Шаг 2. Принудительное завершение процесса при закрытии приложения

Чтобы операционная система гарантированно очищала зависшие вызовы печати при завершении работы основного приложения, внесем изменения в параметры терминальных и локальных сессий. Перейдем по пути:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs

Создадим в этом разделе параметр типа DWORD (32 бита) с именем splwow64.exe и присвоим ему значение 0. Это укажет диспетчеру процессов Windows, что данный транслятор не должен удерживать родительское приложение при его закрытии.


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs]
"splwow64.exe"=dword:00000000

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

Решение 3. Изоляция драйверов и аудит сетевых мониторов

Часто виновниками зависания процесса splwow64.exe становятся дополнительные утилиты мониторинга, которые производители печатающей техники (особенно грешат этим HP, Kyocera и Xerox) поставляют вместе с драйверами. Эти утилиты (Status Monitors) непрерывно опрашивают физические устройства по сети для отображения уровня тонера или бумаги, блокируя системные вызовы при любых неполадках связи.

Рассмотрим, как обезопасить 1С от сбоев таких драйверов:

  1. Включим изоляцию драйверов принтеров. Откроем оснастку «Управление печатью» (выполнить printmanagement.msc). Перейдем в раздел «Драйверы». Найдем установленные в системе драйверы принтеров, кликнем по каждому правой кнопкой мыши и в контекстном меню выберем пункт «Изоляция» -> «Изолированный» (Isolated). Теперь возможный сбой конкретного драйвера принтера выполнится в отдельном процессе памяти и не заблокирует общий диспетчер печати.
  2. Очистим реестр от сторонних мониторов портов. Перейдем в ветку реестра:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors

    По умолчанию здесь должны находиться только стандартные системные порты (например, Local Port, Standard TCP/IP Port, USB Monitor). Если вы видите там специфические папки мониторинга от производителей принтеров (например, HP Discovery Monitor), сделайте резервную копию ветки реестра и удалите эти папки. Это отключит фоновый опрос физических устройств, приводящий к задержкам.
  3. Перейдем на альтернативные драйверы. Если зависания продолжаются, попробуйте заменить тяжелые производительские драйверы класса PCL6 на более легкие версии PostScript (PS) или использовать встроенные универсальные драйверы печати Microsoft (Universal Print Driver), которые лишены избыточного функционала мониторинга портов.

Решение 4. Диагностика и удаление неактивных сетевых устройств

Проанализируем физическую структуру подключений принтеров на проблемном компьютере. Если пользователь часто перемещается с ноутбуком между офисом и домом, либо если в компании менялась структура локальной сети (или использовались подключения через VPN), в операционной системе часто остаются «фантомные» ярлыки когда-то подключенных сетевых принтеров.

При потере фокуса или закрытии 1С операционная система пытается достучаться до каждого прописанного в системе принтера. Если сетевой адрес принтера недоступен, процесс опроса зависает на стандартное время ожидания ответа TCP-порта (около 20–30 секунд на одно устройство). Если таких принтеров несколько — зависание 1С затягивается на минуты.

Для решения этой проблемы выполним следующие действия:

  1. Перейдем в раздел Windows «Параметры» -> «Устройства» -> «Принтеры и сканеры» (или в классическую Панель управления -> «Устройства и принтеры»).
  2. Внимательно изучим список установленных устройств.
  3. Без сожаления удалим все принтеры, имеющие статус «Отключен», «Недоступен», а также старые сетевые пути (вида \\server\printer), которые более не актуальны.
  4. Особое внимание уделим виртуальным принтерам (таким как Microsoft XPS Document Writer, отправка в OneNote, виртуальные PDF-принтеры стороннего софта). Если пользователь ими не пользуется, удалим их из системы.

Проведя комплексную диагностику по описанным шагам — от очистки списка принтеров до настройки параметров реестра Windows или обновления разрядности платформы 1С — мы гарантированно решим проблему зависания программы и обеспечим комфортную и стабильную работу пользователей даже на бюджетных рабочих станциях.

← На главную