В работе с инфраструктурой 1С часто возникают нетривиальные задачи по управлению лицензиями. Рассмотрим распространенный сценарий: в локальной сети есть сервер с аппаратным ключом HASP и сервер 1С, а на другом компьютере развернут веб-сервер (IIS) с опубликованной файловой базой и активированной многопользовательской программной лицензией. Проблема заключается в том, что тонкие клиенты, подключаясь к файловой базе через веб-сервер, упорно получают лицензию с сетевого аппаратного ключа, игнорируя локальную программную. Разберемся, почему так происходит и как заставить систему использовать нужный тип лицензии.
Чтобы понять корень проблемы, необходимо знать, в каком порядке платформа «1С:Предприятие» ищет лицензии. В нашем случае, когда тонкий клиент подключается к базе через веб-сервер, "клиентом" для системы лицензирования выступает не сам тонкий клиент, а модуль расширения веб-сервера. Именно он запрашивает лицензию для каждого нового сеанса. Алгоритм поиска выглядит следующим образом:
В описанной ситуации модуль веб-сервера, не найдя локальных лицензий (или по какой-то причине проигнорировав их), успешно обнаруживает сетевой HASP-ключ, получает с него лицензию и кэширует этот результат. Все последующие подключения идут по этому же пути.
Первая мысль системного администратора — запретить веб-серверу искать ключи в сети с помощью конфигурационного файла nethasp.ini. Этот файл как раз и предназначен для управления поиском сетевых HASP-ключей на стороне клиента. Например, можно создать файл nethasp.ini со следующим содержимым, чтобы отключить все сетевые протоколы поиска:
[NH_COMMON]
NH_IPX = Disabled
NH_NETBIOS = Disabled
NH_TCPIP = Disabled
[NH_TCPIP]
NH_USE_BROADCAST = Disabled
Однако, как показала практика, этот метод не сработал для модуля веб-сервера. Он продолжал получать лицензию с аппаратного ключа. Более того, в ходе обсуждения вскрылась главная проблема, которая делает этот и подобные подходы неработоспособными: программная лицензия была активирована с привязкой к аппаратному ключу HASP.
Это критически важный момент. Такая привязка означает, что для проверки валидности программной лицензии системе необходим постоянный доступ к тому аппаратному ключу, к которому она привязана. Как только доступ к HASP-ключу блокируется (например, настройками в файле nhsrv.ini на сервере с ключом или сетевыми правилами), программная лицензия также перестает работать. Возникает замкнутый круг: чтобы избавиться от аппаратной лицензии, мы блокируем к ней доступ, но тем самым отключаем и привязанную к ней программную. Результат — ошибка "Лицензия не найдена".
Наиболее правильный и современный способ запретить платформе 1С использовать аппаратные ключи — это настройка файла 1cestart.cfg. Этот метод более надежен, чем манипуляции с nethasp.ini, так как действует на уровне самой платформы.
Важно: этот способ сработает только в том случае, если у вас есть независимая программная лицензия, не привязанная к аппаратному ключу.
Выполним настройку по шагам:
bin\conf конкретной версии, например: C:\Program Files\1cv8\8.3.20.1234\bin\conf.1cestart.cfg.
UseHwLicenses=0
iisreset в командной строке, запущенной от имени администратора.После этих действий модуль расширения веб-сервера будет искать только программные лицензии, активированные на этом же компьютере.
Если ваша программная лицензия, как в исходной задаче, привязана к HASP-ключу, единственным надежным решением будет получение и активация отдельной, независимой лицензии.
UseHwLicenses=0 в 1cestart.cfg). Это создаст полностью изолированную и предсказуемую среду, в которой веб-сервер гарантированно будет использовать только свою локальную программную лицензию и никогда не будет "смотреть" в сторону аппаратных ключей в сети.Как уже упоминалось, 1С кэширует информацию о последней полученной лицензии. Чтобы сбросить этот кэш и заставить систему выполнить поиск "с чистого листа", простого перезапуска веб-сервера может быть недостаточно. В сложных случаях может потребоваться очистка служебных каталогов платформы, например, содержимого папки C:\ProgramData\1C\1cv8\srvinfo на сервере.
Важно помнить, что когда лицензии раздает модуль веб-сервера, логика их потребления меняется. В отличие от прямого клиент-серверного подключения, где один пользователь с одного компьютера занимает одну клиентскую лицензию независимо от количества запущенных сеансов, при работе через веб-сервер каждое новое соединение (например, открытие новой вкладки с базой) будет потреблять отдельную лицензию. Это необходимо учитывать при планировании количества лицензий.
Хотя в данном случае nethasp.ini оказался неэффективен, в других ситуациях он может быть полезен. Для справки, вот порядок, в котором система ищет этот файл в ОС Windows:
bin\conf конкретной версии платформы.%LOCALAPPDATA%\1C\1cv8\conf.conf.cfg.%ALLUSERSPROFILE%\1C\1cv8\conf.bin).%SYSTEMROOT%\System32, %SYSTEMROOT% и т.д.).PATH.Понимание этих нюансов поможет вам гибко и точно управлять лицензированием в сложных инфраструктурах 1С.