Почему не хватает лицензий 1С на терминальном сервере и как это исправить без перезагрузки?

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

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

Причина 1: Некорректное завершение сеансов пользователями

Самая распространенная причина «потери» лицензий — это привычка пользователей закрывать 1С путем нажатия на крестик в правом верхнем углу окна терминальной сессии (RDP). В этом случае пользователь фактически не завершает работу с программой, а просто «отключает» сеанс. Сама 1С при этом не получает сигнала о завершении работы и продолжает удерживать лицензию в памяти сервера как активную.

Что нужно сделать в первую очередь:

  1. Проведите инструктаж для пользователей: сначала необходимо корректно закрыть 1С через меню «Файл — Выход», и только потом завершать сеанс Windows через кнопку «Пуск».
  2. Настройте параметры сервера для принудительного отключения пассивных сеансов. В настройках конфигурации 1С (в Конфигураторе) можно установить параметры «Время засыпания пассивных сеансов» и «Время завершения спящих сеансов».

Причина 2: Зависание процесса печати SplWOW64.exe

Даже если пользователь закрыл программу правильно, в Windows Server часто «залипает» процесс SplWOW64.exe. Этот процесс отвечает за работу 32-разрядных приложений с подсистемой печати. Если 1С обращалась к принтеру, этот процесс может остаться активным в оперативной памяти, блокируя завершение терминальной сессии.

Как автоматизировать завершение этого процесса:

Рассмотрим пошагово, как вмешаться в работу реестра Windows, чтобы система принудительно очищала память при выходе пользователя:

  1. Откройте редактор реестра (regedit).
  2. Перейдите в раздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\SysProcs.
  3. Создайте параметр типа DWORD (32 бита) с именем splwow64.exe и установите значение 0. Это даст команду терминальному серверу завершать данный процесс сразу при выходе пользователя.
  4. Дополнительно перейдите в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print.
  5. Создайте параметр DWORD (32 бита) с именем SplWOW64TimeOut и присвойте ему значение 1. Это заставит систему выгружать процесс печати из памяти максимально быстро.

Причина 3: Очистка зависших процессов через скрипты

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

Разберем пример простого скрипта для принудительного завершения процессов 1С, которые остались висеть в диспетчере задач:


@echo off
:: Принудительное завершение всех процессов 1С
taskkill /F /IM 1cv8.exe /T
:: Перезапуск службы лицензирования (если используется HASP)
net stop hasplm
net start hasplm

Важное примечание: Применение команды taskkill с ключом /F (force) немедленно прерывает работу приложения. Используйте этот метод с осторожностью, чтобы пользователи не потеряли несохраненные данные, если скрипт сработает в рабочее время.

Резюме по обслуживанию лицензий

Подводя итоги наших действий, выделим стратегию предотвращения нехватки лицензий:

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

← На главную