Неправильно закрываются терминальные сессии после закрытия приложения

Наверное, во всех больших организациях доступ в 1C организовывается с использованием терминального сервера. Такой сервер позволяет в несколько раз повысить быстродействие всей системы и не чувствовать каких-либо «проседаний» при большом количестве единовременных обращений к базе. Операционная система на терминальном сервере обычно 64-битная, так как количество ОЗУ в нем значительно больше чем 4 Гб.

Именно на 64-битной операционной системе Windows Server и наблюдается проблема с зависанием терминальных сессия после их закрытия.

Суть проблемы

Работник бухгалтерии подключается к терминальному серверу через RDP-клиент, открывает в своей сессии 1С-клиент и спокойненько себе работает. В конце рабочего дня он закрывает свой 1С-клиент и выключает компьютер. Придя на работу утром, работник, как обычно, включает свой терминал, а там синий экран. Бодрое, утреннее настроение резко исходит на нет.

В чем же беда?

Решение

Вся проблема кроется в 64-битности вашей операционной системы. Microsoft, чтобы сгладить проблемы совместимости 32- и 64- битных приложений, разрабатывает различные программные прослойки, который помогают правильно выполнять изначально поставленные перед ними задачи. Но, как говорится: «хотели, как лучше, а получилось как всегда.»

Такой проблемной прослойкой является процесс splwow64.exe, который и является корнем всех наших терминальных бед.

splwow64.exe – это программная прослойка, которая позволяет 32-битным приложениям соединиться с 64-битным диспетчером службы очереди печати.

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

Почему-то в операционной системе Windows Server по умолчанию этот процесс не относится к терминальным процессам, а является системным, из-за чего обычному пользователю удаленного рабочего стола завершить его просто не дано.

Чтобы насильно объявить splwow64.exe процессом, который принадлежит к терминальной сессии, нужно отредактировать системный реестр:

  1. открываем реестр на сервере терминалов regedit;
  2. ищем ветку [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs]
  3. создаем параметр splwow64.exe, типа DWORD (битность любая) и присваиваем ему значение 0 (ноль).

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

P.S. Вообще в этой ветке можно размещать любые процессы, которые вы хотите, чтобы обязательно относились к терминальному серверу и закрывались вместе с закрытием соответствующей терминальной сессии.