Каждый системный администратор и специалист 1С рано или поздно сталкивается с ситуацией, когда пользователи начинают жаловаться на нехватку лицензий, хотя номинально купленных ключей должно хватать с запасом. Например, в вашей организации приобретено 50 лицензий, а активных пользователей всего 25, но программа все равно выдает ошибку: "Не обнаружена свободная лицензия!".
При анализе ситуации через утилиту Aladdin Monitor (AKS Monitor) выясняется, что за некоторыми рабочими станциями числится сразу по несколько заблокированных лицензий, часть из которых зависла под сетевыми адресами хостов, а часть — под петлевым интерфейсом 127.0.0.1 с нулевым таймаутом. Периодический перезапуск службы HASP License Manager решает проблему лишь временно, прерывая текущую работу пользователей.
В этой статье мы подробно разберем природу возникновения "зависающих" лицензий 1С, выясним технические причины этого сбоя и рассмотрим комплекс методов, которые помогут навсегда устранить данную проблему.
Проанализируем ситуацию, когда в Aladdin Monitor отображаются занятые лицензии с IP-адресом 127.0.0.1 (localhost). Это указывает на то, что лицензию запросил процесс, запущенный локально на том же сервере, где функционирует HASP License Manager.
В архитектуре "1С:Предприятия" это происходит в следующих случаях:
rphost.exe) для выполнения запланированных задач (например, обновление полнотекстового поиска, загрузка курсов валют или извлечение текста) обращается к менеджеру лицензий локально.127.0.0.1 с таймаутом 0 (бессрочно, пока активна служба сервера).Решение проблемы конфликта раздачи:
Когда сервер 1С и клиенты одновременно пытаются забирать лицензии из одного и того же физического или виртуального ключа, возникает конфликт. Рекомендуется четко разделить схемы работы:
Если ваши сотрудники работают в терминальном режиме (RDP) на серверах под управлением 64-битных операционных систем Windows Server, основной причиной удержания лицензий при закрытии программы часто становится системный процесс транслятора печати splwow64.exe.
Этот процесс автоматически запускается операционной системой Windows, когда 32-битное клиентское приложение (каковым часто является платформа 1С:Предприятие) отправляет документ на печать. Проблема заключается в том, что после закрытия пользователем программы 1С процесс splwow64.exe продолжает оставаться активным в памяти сеанса Windows еще в течение 20 минут (дефолтное системное время ожидания). Из-за этого терминальная сессия пользователя не завершается полностью, переходит в статус "Разъединен" (Disconnected) и продолжает удерживать сетевую лицензию HASP.
Рассмотрим по шагам, как принудительно завершать этот процесс при закрытии сеанса пользователя через системный реестр Windows Server:
Win + R, введите regedit и нажмите Enter).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
Splwow64TimeOut и присвойте ему значение 1 (в десятичной системе). Это сократит время удержания процесса в памяти после завершения печати до 1 секунды.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\SysProcs
SPLWOW64.EXE и установите его значение равным 0. Это даст операционной системе прямую инструкцию принудительно завершать данный процесс при закрытии пользователем терминального сеанса.После внесения этих изменений в реестр и перезагрузки сервера печати закрытие программы 1С будет приводить к мгновенному корректному закрытию RDP-сессии и освобождению занятой лицензии.
Начиная с версии платформы 8.3.5, разработчики 1С существенно изменили механизм управления сеансами. При нештатном обрыве связи (например, у пользователя на ноутбуке пропал Wi-Fi, компьютер ушел в спящий режим или произошел кратковременный сбой локальной сети) сеанс не закрывается сразу.
Платформа переводит такой сеанс в статус "спящего". По умолчанию спящий сеанс удерживает выданную ему лицензию в течение 24 часов (86 400 секунд). Если пользователь заново открывает программу после восстановления сети, сервер 1С часто не может сопоставить его с прежним "уснувшим" сеансом, создает новое подключение и расходует еще одну лицензию. В итоге один пользователь может физически занять 2, 3 и более лицензий.
Отрегулируем эти параметры в Конфигураторе 1С:
1200 до 1800 секунд (20–30 минут). Не устанавливайте слишком маленькое значение (менее 10 минут), так как сама платформа периодически опрашивает сервер для подтверждения активности, и слишком агрессивный таймаут приведет к ложным засыпаниям активных сессий при чтении пользователем длинных отчетов.1200 до 3600 секунд (от 20 минут до 1 часа). Это критически важный параметр: если сеанс перешел в спящий режим и связь не восстановилась за указанное время, сервер 1С принудительно закроет сессию и вернет лицензию в общий пул.Одной из скрытых причин зависания лицензий являются сетевые задержки и потери пакетов при широковещательном опросе ключей. По умолчанию платформа 1С пытается найти менеджер лицензий HASP LM во всей локальной сети, отправляя широковещательные UDP-запросы на порт 475. В больших сетях с маршрутизаторами, VPN и Wi-Fi сегментами пакеты могут теряться, из-за чего менеджер лицензий "теряет" клиента, не получает от него сигнал корректного выхода и блокирует лицензию на длительный срок.
Для устранения этой проблемы переведем взаимодействие платформы с HASP LM на надежный протокол TCP с указанием конкретного IP-адреса сервера лицензирования. Нам потребуется отредактировать конфигурационный файл nethasp.ini, который находится на рабочих станциях пользователей в каталоге установки платформы (по умолчанию это путь C:\Program Files\1cv8\conf\ или в папке конкретного релиза).
Откройте файл nethasp.ini любым текстовым редактором и приведите его к следующему виду:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 10.1.1.11
NH_TCPIP_METHOD = TCP
NH_USE_BROADCAST = Disabled
Разберем, что делают эти параметры:
NH_TCPIP = Enabled — принудительно разрешает использование сетевого протокола TCP/IP для связи с ключом.NH_SERVER_ADDR = 10.1.1.11 — указывает точный IP-адрес сервера, на котором установлена служба HASP License Manager и вставлен физический USB-ключ (замените адрес на актуальный для вашей сети).NH_TCPIP_METHOD = TCP — указывает использовать стабильное соединение TCP вместо дефолтных пакетов UDP, подверженных частым потерям в беспроводных и перегруженных сетях.NH_USE_BROADCAST = Disabled — полностью отключает отправку широковещательных пакетов (Broadcast) в сеть, что исключает задержки при запуске 1С и снижает паразитную нагрузку на сетевое оборудование.Если в вашей сети работает несколько многопользовательских ключей HASP, менеджеры лицензий могут конфликтовать. Чтобы разграничить их работу, откройте файл конфигурации службы менеджера лицензий nhsrv.ini на сервере (он лежит в каталоге установки службы HASP LM) и задайте каждому менеджеру уникальное имя:
[NHS_SERVER]
NHS_SERVERNAMES = LM_SERVER_01
После этого на клиентах в файле nethasp.ini укажите имя конкретного менеджера лицензий, к которому они должны обращаться:
NH_SERVER_NAME = LM_SERVER_01
Если по какой-то причине кардинально перенастроить сеть или параметры ИБ в данный момент невозможно, а работать пользователям нужно прямо сейчас, можно настроить автоматический перезапуск службы менеджера лицензий по расписанию. Пользователи 1С при этом не потеряют свои несохраненные данные и не вылетят из программы, так как платформа умеет кратковременно ожидать восстановления связи с ключом.
Разберем, как автоматизировать этот процесс:
.bat (например, restart_hasp.bat).
@echo off
net stop "HASP Loader"
timeout /t 5 /nobreak
net start "HASP Loader"
restart_hasp.bat.Этот метод является временным решением ("костылем"), но он гарантированно очистит пул зависших лицензий с нулевым таймаутом без прерывания текущей работы пользователей.
Применив описанный комплекс мер — от оптимизации параметров спящих сессий в конфигурации 1С до настройки системного реестра терминального сервера и точечного конфигурирования сетевого протокола связи с ключом — вы сможете полностью избавиться от проблемы "зависающих" лицензий и обеспечить стабильную, бесперебойную работу всех пользователей вашей системы.