Работа в терминальном режиме — это стандарт де-факто для многих компаний, использующих 1С:Предприятие. Однако системные администраторы часто сталкиваются с парадоксальной ситуацией: по документам куплено и активировано, например, четыре лицензии, в диспетчере задач мы видим только трех активных пользователей, но четвертый войти не может из-за ошибки «Ключ защиты не обнаружен» или «Нет свободных лицензий». В этой статье мы подробно разберем, почему «залипают» лицензии, как операционная система Windows влияет на их удержание и что нужно настроить, чтобы программные лицензии освобождались вовремя.
Для начала проанализируем механизм работы программной защиты 1С в среде удаленных рабочих столов (RDP). Важно понимать фундаментальное отличие: в терминальной сессии программные лицензии раздаются не на каждое запущенное приложение, а на сеанс пользователя. Это означает, что если один пользователь внутри своего терминального окна запустит три разные базы 1С, будет израсходована только одна лицензия. Однако, если сессия пользователя не завершена корректно или в памяти остались «фантомные» процессы, лицензия будет считаться занятой.
Рассмотрим основные причины, по которым лицензия может быть недоступна, даже если пользователь визуально не работает в программе:
1cv8.exe продолжает удерживать лицензию.SplWOW64.exe может блокировать завершение процессов 1С, удерживая лицензию неограниченное время..lic находятся в профиле конкретного пользователя, другие могут их просто не «видеть».Одной из самых неочевидных причин удержания лицензии является работа службы печати. Проанализируем ситуацию: Windows Server 64-bit использует процесс SplWOW64.exe для поддержки 32-битных приложений печати. Часто этот процесс не закрывается после печати из 1С и «цепляет» родительский процесс 1cv8.exe, не давая лицензии освободиться. Разберем по шагам, как исправить это через реестр.
Во-первых, нам необходимо уменьшить тайм-аут завершения процесса SplWOW64.exe. Перейдем в ветку реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
Создадим там параметр SplWOW64TimeOut типа DWORD (32 бита) и установим значение 1. Это заставит систему закрывать процесс практически сразу после завершения печати.
Во-вторых, заставим сервер принудительно завершать SplWOW64.exe при закрытии терминальной сессии. Перейдем в раздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\SysProcs
Добавим новый параметр SPLWOW64.EXE со значением 0. Это гарантирует, что лицензия не останется в «подвешенном» состоянии из-за очереди печати.
Если ваша информационная база файловая, то фоновые задания (индексация, обмен данными, обновление полнотекстового поиска) могут запускаться автоматически. Выясним причину нехватки лицензий: если у вас ровно 4 лицензии и 3 человека работают активно, а в этот момент стартует автоматический обмен — 4-й пользователь получит отказ. Рассмотрим, как это можно регулировать.
В конфигураторе перейдем в меню Администрирование — Параметры информационной базы. Нам важны следующие параметры:
Также проанализируем настройки самих регламентных заданий. По возможности перенесите тяжелые обмены и обслуживание базы на ночное время, чтобы они не конкурировали с пользователями за лицензии в рабочие часы.
Часто проблема решается административными мерами на уровне операционной системы. Проанализируем поведение пользователей: если сессия «висит» в статусе отключенной более часа, она бесполезно занимает лицензию. Настроим групповые политики (GPO) сервера для автоматической очистки.
Выполним следующие шаги:
После этой настройки, как только пользователь закроет окно терминала без логаута, через 15 минут сервер сам завершит все его процессы, включая 1С, и вернет лицензию в «пул» свободных.
Иногда 1С не видит лицензию, потому что она установлена «не там». Программные лицензии могут быть установлены на компьютер (всем пользователям) или на текущего пользователя. На терминальном сервере крайне важно, чтобы лицензии были доступны всем.
Проверим папку: C:\ProgramData\1C\licenses. Именно здесь должны лежать файлы с расширением .lic. Если вы находите их в %AppData%\1C\1cv8\conf, значит, они активированы только под одним профилем. Рекомендуется перенести файлы в общую папку ProgramData и убедиться, что у группы «Пользователи» есть права на чтение этой директории. Рассмотрим пример прав доступа: если файл лицензии заблокирован для чтения системой или антивирусом, 1С проигнорирует его и выдаст ошибку отсутствия ключа.
Чтобы понять, какая именно лицензия сейчас используется, воспользуемся встроенными средствами 1С. В запущенной программе перейдем в меню Справка — О программе. В самом низу раздела «Лицензия» будет указано:
Если же база клиент-серверная, проанализируем список сеансов через Консоль администрирования серверов 1С. Там в колонке «Лицензия» наглядно видно, какой сеанс потребляет программный ключ, а какой — аппаратный (HASP).
Существует мнение, что аппаратные ключи (USB) стабильнее работают в терминале. Действительно, USB-ключ более устойчив к изменению параметров «железа» (например, после обновления Windows или изменения объема оперативной памяти программная лицензия может «слететь»), но в вопросе «залипания» сессий они ведут себя схожим образом. Однако аппаратная лицензия считается на пользователя (один ключ — один человек), в то время как программная в терминале также считается на сессию. Если у вас часто происходят сбои активации, рассмотрите вариант апгрейда на USB-ключ, но помните, что это потребует физического доступа к серверу и дополнительных затрат.
Подводя итог, можно сказать, что в 90% случаев проблема «нехватки лицензий» на терминале при свободном диспетчере задач решается настройкой тайм-аутов SplWOW64 в реестре и жестким ограничением времени жизни разорванных RDP-сессий. Проверьте эти настройки, и стабильность работы ваших пользователей значительно возрастет.