Как исправить ошибку BEX при запуске HASP License Manager и управлять зависшими лицензиями 1С

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

При администрировании серверов 1С специалисты часто сталкиваются с необходимостью управления аппаратными ключами защиты HASP. Одной из наиболее острых проблем является некорректная работа менеджера лицензий (HASP LM) на современных операционных системах, начиная с Windows Server 2012 R2. В этой статье мы подробно разберем, почему возникает ошибка BEX с модулем StackHash, как правильно настроить мониторинг лицензий и какие современные альтернативы существуют для стабильной работы системы.

Проанализируем причину ошибки BEX и StackHash

Ошибка BEX (Buffer Overflow Exception) в сочетании с кодом исключения c0000005 при запуске исполняемого файла nhsrvw32.exe (менеджер лицензий в режиме приложения) указывает на попытку обращения к памяти, которая защищена системой. Разберем ситуацию глубже. Приложение HASP LM версии 8.32 и ниже было разработано в эпоху Windows XP и Server 2003. В новых ОС Windows реализованы механизмы защиты DEP (Data Execution Prevention) и ASLR (Address Space Layout Randomization).

Проблема заключается в том, что старый 32-битный код менеджера лицензий не умеет корректно работать с динамическим перераспределением адресов памяти. Даже если мы добавим приложение в исключения DEP, ошибка может сохраняться из-за механизмов контроля целостности стека. Запуск в режиме совместимости с Windows 7 или XP часто не дает результата, так как ядро системы 6.3 (Server 2012 R2) накладывает более жесткие ограничения на выполнение инструкций в памяти.

Рассмотрим настройку HASP License Manager как службы

Поскольку запуск в режиме приложения часто приводит к краху, наиболее стабильным вариантом остается работа в режиме службы (Service). Однако пользователи часто жалуются, что при работе службы невозможно управлять сессиями. Это заблуждение. Выясним, почему Aladdin Monitor может показывать «пустой список», даже если служба запущена и ключи видны.

Основная причина — некорректная привязка службы к сетевым интерфейсам. Если на сервере несколько сетевых карт (или есть виртуальные адаптеры), менеджер лицензий может «слушать» не тот интерфейс, через который идет обращение от монитора. Для решения этой проблемы нам необходимо отредактировать конфигурационный файл nhsrv.ini.

Найдем этот файл (обычно он находится в C:\Windows\SysWOW64 или в папке установки менеджера) и проанализируем следующие параметры:


[NHS_IP]
; Укажите конкретный IP-адрес вашего сервера
NHS_IP_LIMIT = 192.168.1.10 

[NHS_SERVER]
; Включите использование протоколов UDP и TCP
NHS_USE_UDP = Enabled
NHS_USE_TCP = Enabled

После внесения изменений службу необходимо перезапустить. Теперь Aladdin Monitor, запущенный от имени администратора, с большей вероятностью увидит активные сессии.

Разберем способы борьбы с «зависшими» лицензиями

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

  1. Использование Aladdin Monitor: Если монитор настроен верно (см. предыдущий пункт), вы увидите таблицу сессий. Кнопка Disconnect позволяет разорвать соединение. Важно помнить: 1С версии 8.3 периодически проверяет наличие ключа. Если проверка попадет на момент отключения, пользователь получит сообщение «Ключ защиты программы больше не доступен».
  2. Автоматизация через тайм-ауты: Вместо ручного отключения лучше настроить автоматический сброс неактивных сессий. В файле nhsrv.ini за это отвечает параметр NHS_USER_SESSION_TIMEOUT.
  3. Консоль администрирования 1С: Если лицензии раздает сервер 1С (а не клиентские компьютеры напрямую по сети), то управление сессиями должно происходить через консоль администрирования сервера 1С, а не через менеджер лицензий HASP.

Рассмотрим пример настройки тайм-аута в nhsrv.ini для автоматической очистки:


; Устанавливаем время ожидания в минутах (например, 15 минут)
NHS_USER_SESSION_TIMEOUT = 15

Переход на современные решения: Sentinel LDK и ACC

Проанализируем наиболее технологичный способ решения проблемы. Старый HASP HL License Manager (порт 475) морально устарел. Компания Thales (Aladdin) предлагает современный стек — Sentinel LDK Runtime.

Установив актуальный драйвер Runtime (версии 8.x и выше), вы получаете доступ к Admin Control Center (ACC). Это мощный веб-интерфейс, работающий на порту 1947. Рассмотрим его преимущества:

Важное замечание: При переходе на Sentinel LDK Runtime необходимо полностью удалить старую службу HASP License Manager, так как они могут конфликтовать за аппаратный ключ.

Выясним риски отключения DEP и использования скриптов

В ходе обсуждения часто предлагается радикальный метод — полное отключение DEP через командную строку:

bcdedit.exe /set {current} nx AlwaysOff

Мы крайне не рекомендуем этот метод для серверных ОС. DEP защищает систему от выполнения вредоносного кода в сегментах памяти. Отключая его глобально, вы открываете вектор атаки на сервер. Если исключение конкретного файла nhsrvw32.exe через графический интерфейс «Свойства системы -> Дополнительно -> Быстродействие -> Параметры -> Предотвращение выполнения данных» не помогает, значит проблема глубже, и нужно переходить к использованию службы или ACC.

Также стоит с осторожностью относиться к BAT-файлам для циклического перезапуска службы LM. Посмотрим на типичный пример такого сценария:


net stop "HASP Loader"
timeout /t 5
net start "HASP Loader"

Такой подход — это «костыль». Если в момент выполнения net stop платформа 1С обратится к ключу, работа пользователя будет прервана с потерей несохраненных данных. Используйте это только как крайнюю меру в нерабочее время.

Итоговые рекомендации

Подведем итог нашему исследованию. Если вы столкнулись с ошибкой BEX на Windows Server 2012 R2:

  1. Откажитесь от запуска менеджера как приложения. Используйте режим службы.
  2. Настройте конфигурацию nhsrv.ini. Укажите явный IP-адрес сервера для корректной работы Aladdin Monitor.
  3. Проверьте настройки Firewall. Убедитесь, что открыты порты 475 (UDP/TCP) для старого LM и 1947 (TCP) для нового.
  4. Лучшее решение: Установите свежий Sentinel HASP LDK Runtime и используйте веб-интерфейс Admin Control Center для мониторинга и сброса зависших лицензий. Это снимет все вопросы совместимости с современными ОС и обеспечит максимальную стабильность работы 1С.
← На главную