Как избавиться от появления зависающих лицензий в 1С?

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

Каждый системный администратор и специалист 1С рано или поздно сталкивается с ситуацией, когда пользователи начинают жаловаться на нехватку лицензий, хотя номинально купленных ключей должно хватать с запасом. Например, в вашей организации приобретено 50 лицензий, а активных пользователей всего 25, но программа все равно выдает ошибку: "Не обнаружена свободная лицензия!".

При анализе ситуации через утилиту Aladdin Monitor (AKS Monitor) выясняется, что за некоторыми рабочими станциями числится сразу по несколько заблокированных лицензий, часть из которых зависла под сетевыми адресами хостов, а часть — под петлевым интерфейсом 127.0.0.1 с нулевым таймаутом. Периодический перезапуск службы HASP License Manager решает проблему лишь временно, прерывая текущую работу пользователей.

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

Выясняем причины: почему появляется IP 127.0.0.1 и Timeout = 0

Проанализируем ситуацию, когда в Aladdin Monitor отображаются занятые лицензии с IP-адресом 127.0.0.1 (localhost). Это указывает на то, что лицензию запросил процесс, запущенный локально на том же сервере, где функционирует HASP License Manager.

В архитектуре "1С:Предприятия" это происходит в следующих случаях:

  1. Выполнение фоновых и регламентных заданий: Служба сервера 1С (процесс rphost.exe) для выполнения запланированных задач (например, обновление полнотекстового поиска, загрузка курсов валют или извлечение текста) обращается к менеджеру лицензий локально.
  2. Раздача лицензий сервером 1С: Если в свойствах информационной базы параметр "Разрешить выдачу лицензий сервером" установлен в значение "Да" (по умолчанию), то сервер 1С сам забирает лицензии из HASP-ключа и распределяет их между сессиями пользователей. В мониторе это выглядит так, будто сервер занял все доступные лицензии под IP-адресом 127.0.0.1 с таймаутом 0 (бессрочно, пока активна служба сервера).

Решение проблемы конфликта раздачи:

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

Решаем проблему с зависанием процесса splwow64.exe в терминальных сессиях

Если ваши сотрудники работают в терминальном режиме (RDP) на серверах под управлением 64-битных операционных систем Windows Server, основной причиной удержания лицензий при закрытии программы часто становится системный процесс транслятора печати splwow64.exe.

Этот процесс автоматически запускается операционной системой Windows, когда 32-битное клиентское приложение (каковым часто является платформа 1С:Предприятие) отправляет документ на печать. Проблема заключается в том, что после закрытия пользователем программы 1С процесс splwow64.exe продолжает оставаться активным в памяти сеанса Windows еще в течение 20 минут (дефолтное системное время ожидания). Из-за этого терминальная сессия пользователя не завершается полностью, переходит в статус "Разъединен" (Disconnected) и продолжает удерживать сетевую лицензию HASP.

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

  1. Откройте редактор реестра (нажмите Win + R, введите regedit и нажмите Enter).
  2. Перейдите к разделу настройки таймаута печати:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
  3. Создайте в этом разделе параметр типа DWORD (32-бит) с именем Splwow64TimeOut и присвойте ему значение 1 (в десятичной системе). Это сократит время удержания процесса в памяти после завершения печати до 1 секунды.
  4. Затем перейдите к разделу управления системными процессами терминального сервера:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\SysProcs
  5. Создайте здесь параметр типа DWORD (32-бит) с именем SPLWOW64.EXE и установите его значение равным 0. Это даст операционной системе прямую инструкцию принудительно завершать данный процесс при закрытии пользователем терминального сеанса.

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

Настройка параметров "спящих" и "пассивных" сеансов в 1С

Начиная с версии платформы 8.3.5, разработчики 1С существенно изменили механизм управления сеансами. При нештатном обрыве связи (например, у пользователя на ноутбуке пропал Wi-Fi, компьютер ушел в спящий режим или произошел кратковременный сбой локальной сети) сеанс не закрывается сразу.

Платформа переводит такой сеанс в статус "спящего". По умолчанию спящий сеанс удерживает выданную ему лицензию в течение 24 часов (86 400 секунд). Если пользователь заново открывает программу после восстановления сети, сервер 1С часто не может сопоставить его с прежним "уснувшим" сеансом, создает новое подключение и расходует еще одну лицензию. В итоге один пользователь может физически занять 2, 3 и более лицензий.

Отрегулируем эти параметры в Конфигураторе 1С:

  1. Откройте информационную базу в режиме Конфигуратор с правами администратора.
  2. Перейдите в главное меню: Администрирование -> Параметры информационной базы.
  3. Найдите параметры управления временем жизни сеансов и скорректируйте их значения:
    • Время засыпания пассивного сеанса: Установите значение в пределах от 1200 до 1800 секунд (20–30 минут). Не устанавливайте слишком маленькое значение (менее 10 минут), так как сама платформа периодически опрашивает сервер для подтверждения активности, и слишком агрессивный таймаут приведет к ложным засыпаниям активных сессий при чтении пользователем длинных отчетов.
    • Время завершения спящего сеанса: Установите значение от 1200 до 3600 секунд (от 20 минут до 1 часа). Это критически важный параметр: если сеанс перешел в спящий режим и связь не восстановилась за указанное время, сервер 1С принудительно закроет сессию и вернет лицензию в общий пул.
  4. Нажмите кнопку "ОК" для применения настроек. Перезапуск сервера 1С не требуется.

Тонкая настройка сетевых параметров связи с HASP через nethasp.ini

Одной из скрытых причин зависания лицензий являются сетевые задержки и потери пакетов при широковещательном опросе ключей. По умолчанию платформа 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

Разберем, что делают эти параметры:

Если в вашей сети работает несколько многопользовательских ключей HASP, менеджеры лицензий могут конфликтовать. Чтобы разграничить их работу, откройте файл конфигурации службы менеджера лицензий nhsrv.ini на сервере (он лежит в каталоге установки службы HASP LM) и задайте каждому менеджеру уникальное имя:


[NHS_SERVER]
NHS_SERVERNAMES = LM_SERVER_01

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

NH_SERVER_NAME = LM_SERVER_01

Резервный вариант: автоматический перезапуск службы HASP

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

Разберем, как автоматизировать этот процесс:

  1. Создайте обычный текстовый файл с расширением .bat (например, restart_hasp.bat).
  2. Вставьте в него следующий исполняемый код:
    
    @echo off
    net stop "HASP Loader"
    timeout /t 5 /nobreak
    net start "HASP Loader"
    
  3. Сохраните файл на сервере лицензирования.
  4. Откройте встроенный "Планировщик заданий" Windows (Task Scheduler).
  5. Создайте новую простую задачу, укажите запуск от имени учетной записи SYSTEM или Администратора с наивысшими правами.
  6. В триггерах настройте расписание запуска задачи (например, каждый час или в обеденный перерыв и ночью).
  7. В качестве действия укажите запуск вашего созданного файла restart_hasp.bat.

Этот метод является временным решением ("костылем"), но он гарантированно очистит пул зависших лицензий с нулевым таймаутом без прерывания текущей работы пользователей.

Применив описанный комплекс мер — от оптимизации параметров спящих сессий в конфигурации 1С до настройки системного реестра терминального сервера и точечного конфигурирования сетевого протокола связи с ключом — вы сможете полностью избавиться от проблемы "зависающих" лицензий и обеспечить стабильную, бесперебойную работу всех пользователей вашей системы.

← На главную