Каждый системный администратор или опытный пользователь 1С рано или поздно сталкивается с загадочным поведением программы: база данных работает стабильно, но стоит переключиться на другое окно (потерять фокус приложения) или попытаться закрыть программу, как интерфейс полностью зависает и перестает отвечать на любые действия. В Диспетчере задач Windows при этом можно заметить появление процесса Print driver host for application (исполняемый файл splwow64.exe), который «прицепляется» к группе процессов 1cv8 (32 бита).
Особенно остро эта проблема проявляется на рабочих станциях со слабыми или энергоэффективными процессорами (например, линейки AMD A6, Intel Atom или Celeron). На более производительных компьютерах (например, с процессорами Intel Core i3/i5 или AMD Ryzen) конфликт проявляется мягче — кратковременным «залипанием» программы на 1–2 минуты при закрытии, после чего окно всё-таки исчезает. В этой статье мы подробно разберем причины возникновения данной коллизии и рассмотрим эффективные практические методы ее решения.
Для начала проанализируем архитектуру взаимодействия приложений в операционной системе Windows. Процесс splwow64.exe (Thunking Spooler APIS) является официальным системным транслятором Microsoft. Его единственная задача — позволить устаревшим 32-разрядным приложениям (каковым и является 32-битный толстый или тонкий клиент 1С) отправлять документы на печать через современные 64-разрядные драйверы принтеров.
Каждый раз, когда в 1С происходит переключение фокуса, открытие диалоговых окон, подготовка печатных форм или попытка корректного закрытия программы, платформа обращается к операционной системе с запросом на получение списка доступных принтеров и их текущего статуса (так называемая энумерация устройств). В этот момент происходит следующее:
splwow64.exe для связи с 64-битными драйверами.splwow64.exe уходит в состояние длительного ожидания ответа (таймаут).Ниже мы подробно разберем несколько способов устранения этой проблемы — от простых организационных мер до глубокой настройки операционной системы Windows.
Наиболее надежный и современный метод избавиться от зависаний раз и навсегда — исключить саму необходимость использования транслятора splwow64.exe. Для этого нам потребуется перевести рабочую станцию на использование 64-разрядного клиента 1С:Предприятие.
Поскольку и операционная система Windows, и драйверы принтеров в 99% случаев сейчас являются 64-разрядными, 64-битное приложение 1С будет общаться с подсистемой печати напрямую, без посредников. Это полностью нивелирует конфликт и разгрузит процессор.
Выполним переход по шагам:
windows64).После запуска 64-битной версии 1С обратите внимание на Диспетчер задач. Процесс splwow64.exe больше не будет появляться при активности программы, а интерфейс перестанет зависать.
Если по каким-то технологическим причинам (например, из-за использования специфических внешних компонент или старых драйверов торгового оборудования, работающих только в 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
После внесения изменений в реестр необходимо перезагрузить компьютер, чтобы новые параметры работы подсистемы печати вступили в силу.
Часто виновниками зависания процесса splwow64.exe становятся дополнительные утилиты мониторинга, которые производители печатающей техники (особенно грешат этим HP, Kyocera и Xerox) поставляют вместе с драйверами. Эти утилиты (Status Monitors) непрерывно опрашивают физические устройства по сети для отображения уровня тонера или бумаги, блокируя системные вызовы при любых неполадках связи.
Рассмотрим, как обезопасить 1С от сбоев таких драйверов:
printmanagement.msc). Перейдем в раздел «Драйверы». Найдем установленные в системе драйверы принтеров, кликнем по каждому правой кнопкой мыши и в контекстном меню выберем пункт «Изоляция» -> «Изолированный» (Isolated). Теперь возможный сбой конкретного драйвера принтера выполнится в отдельном процессе памяти и не заблокирует общий диспетчер печати.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors
Local Port, Standard TCP/IP Port, USB Monitor). Если вы видите там специфические папки мониторинга от производителей принтеров (например, HP Discovery Monitor), сделайте резервную копию ветки реестра и удалите эти папки. Это отключит фоновый опрос физических устройств, приводящий к задержкам.Проанализируем физическую структуру подключений принтеров на проблемном компьютере. Если пользователь часто перемещается с ноутбуком между офисом и домом, либо если в компании менялась структура локальной сети (или использовались подключения через VPN), в операционной системе часто остаются «фантомные» ярлыки когда-то подключенных сетевых принтеров.
При потере фокуса или закрытии 1С операционная система пытается достучаться до каждого прописанного в системе принтера. Если сетевой адрес принтера недоступен, процесс опроса зависает на стандартное время ожидания ответа TCP-порта (около 20–30 секунд на одно устройство). Если таких принтеров несколько — зависание 1С затягивается на минуты.
Для решения этой проблемы выполним следующие действия:
\\server\printer), которые более не актуальны.Проведя комплексную диагностику по описанным шагам — от очистки списка принтеров до настройки параметров реестра Windows или обновления разрядности платформы 1С — мы гарантированно решим проблему зависания программы и обеспечим комфортную и стабильную работу пользователей даже на бюджетных рабочих станциях.