При настройке интеграций между различными базами данных 1С специалисты часто сталкиваются с неприятной ситуацией. Интерактивные пользователи работают в системе абсолютно нормально, никаких проблем с ключами защиты не возникает. Однако при попытке программного подключения к базе через COM-соединение система выдает критическую ошибку: «Ошибка при вызове метода контекста (Connect): Произошла исключительная ситуация (V82.COMConnector.1): Не найдена лицензия COM-соединением. Не обнаружен ключ защиты программы или полученная программная лицензия!».
В рамках данной статьи мы подробно проанализируем ситуацию, выясним причины такого поведения платформы и разберем по шагам эффективные методы решения этой проблемы для аппаратных (HASP) и программных лицензий.
Прежде чем переходить к практическим шагам, рассмотрим подробнее внутренние механизмы работы платформы 1С:Предприятие. Когда обычный пользователь запускает клиентское приложение 1С, поиск лицензий происходит по стандартному многошаговому алгоритму. Клиент ищет локальный HASP-ключ, затем обращается к сетевому HASP-ключу через менеджер лицензий, а при их отсутствии пытается получить программную лицензию из файлов .lic или запрашивает лицензию у сервера 1С:Предприятия.
С COM-соединением ситуация обстоит иначе. Объект COMConnector инициализируется в контексте вызывающего процесса (например, фонового задания, службы сервера 1С или веб-сервера). В ранних и некоторых промежуточных релизах платформы (включая ветку 8.2) зафиксирована известная ошибка (например, SW570384): если объекту COMConnector недоступны локальный или сетевой ключи HASP напрямую, он не может получить лицензию от сервера 1С:Предприятия и аварийно завершает работу, выдавая ошибку о ненайденной лицензии. Кроме того, COM-соединение часто запускается из-под системных учетных записей, которые банально не имеют прав доступа к файлам лицензий в профилях пользователей.
Ниже представлены проверенные способы решения этой проблемы.
Рассмотрим ситуацию, когда платформа 1С запускается из сетевой папки (так называемой «шары»), а на терминальных серверах выложены лишь ярлыки к исполняемому файлу. Такая схема удобна для обновлений, но крайне нежелательна для работы COM-соединений. Для корректной работы COM-компоненты библиотека comcntr.dll должна быть правильно зарегистрирована в реестре локальной операционной системы.
Выполним локальную установку платформы на терминальный сервер и зарегистрируем библиотеку вручную:
C:\Program Files (x86)\1cv82\).comcntr.dll, указав точный путь к ней:
regsvr32 "C:\Program Files (x86)\1cv82\8.2.14.540\bin\comcntr.dll"
В случае успешной регистрации операционная система выдаст соответствующее уведомление. Это гарантирует, что при вызове V82.COMConnector Windows обратится к локальной физической библиотеке, а не к сетевому ресурсу.
Часто COM-соединение игнорирует аппаратные ключи HASP, установленные в локальной сети, и безуспешно пытается найти программные файлы лицензий. Чтобы исправить это поведение, мы можем явно указать платформе на необходимость использования аппаратной защиты.
Посмотрим на пример конфигурационного файла 1CEStart.cfg. Этот файл отвечает за общие параметры запуска 1С и может находиться как в каталоге общего профиля C:\ProgramData\1C\1CEStart\, так и в индивидуальных профилях пользователей. Нам необходимо отредактировать этот файл:
1CEStart.cfg с помощью любого текстового редактора.UseHWLicenses.0, или вообще отсутствует, обязательно установим ее в значение 1:
UseHWLicenses=1
После сохранения изменений платформа при инициализации COM-объекта будет в обязательном порядке опрашивать ключи HASP.
Если в вашей инфраструктуре используются многопользовательские сетевые ключи HASP, помните важное правило: сервер 1С:Предприятия умеет раздавать лицензии интерактивным клиентам самостоятельно, но COM-соединение эту серверную раздачу зачастую не видит.
Для того чтобы COM-соединение успешно определяло сетевые ключи, проанализируем топологию сети и выполним следующие настройки:
nethasp.ini. Он располагается в папке bin\conf\ установленной платформы 1С.[NH_TCPIP], чтобы исключить проблемы с поиском ключа по широковещательным запросам:
[NH_COMMON]
NH_TCPIP = Enabled
[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100 ; Здесь укажите IP-адрес сервера с ключом защиты
NH_PORTNUM = 475
NH_TCPIP_METHOD = UDP
Если ваше предприятие использует программное лицензирование, то главной причиной ошибки COM-соединения чаще всего является ограничение прав доступа ОС Windows.
Разберем эту ситуацию по шагам. Когда администратор активирует программную лицензию, файлы с расширением .lic по умолчанию сохраняются в его личном профиле, например, в каталоге C:\Users\Администратор\AppData\Local\1C\1Cv8\conf\. В то же время процесс COM-соединения может инициироваться службой сервера 1С, работающей под учетной записью USR1CV8, или веб-сервером IIS под учетной записью IUSR. У этих системных пользователей нет прав на чтение папки профиля администратора, из-за чего COM-соединение рапортует об отсутствии лицензий.
Чтобы решить эту проблему, выполним следующие действия:
*.lic из пользовательских профилей в общий каталог, доступный всей системе: C:\ProgramData\1C\licenses\.USR1CV8 (или того пользователя, из-под которого запущена служба сервера 1С) и ИИ_IUSRS (для веб-серверов), предоставив им права на «Чтение» и «Выполнение».Важное предупреждение о логике поиска программных лицензий: Платформа 1С сканирует папки с лицензиями последовательно. Как только она находит каталог, в котором есть хотя бы один файл *.lic (даже если он пустой, поврежденный или просроченный), поиск в других каталогах прекращается. Поэтому настоятельно рекомендуем собрать все действующие файлы лицензий в одной общей папке C:\ProgramData\1C\licenses\, очистив все остальные каталоги (включая папки в Program Files и профилях пользователей) от устаревших файлов лицензий.
Очень часто в 64-битных операционных системах возникает конфликт разрядностей. Например, 64-битный сервер 1С:Предприятия или 64-битный веб-сервер IIS пытается вызвать 32-битную библиотеку comcntr.dll (или наоборот). Из-за этого вызов завершается ошибкой прав доступа или отсутствия лицензии.
Создадим изолированное приложение в Службах компонентов Windows, которое решит проблему разрядности и прав доступа:
Win + R, введите dcomcnfg и нажмите Enter. Откроется окно «Службы компонентов».1C_COM_Connector.dllhost.exe).comcntr.dll.Эта настройка позволяет полностью изолировать процесс выполнения COM-соединения и запустить его под учетной записью с максимальными привилегиями доступа к лицензиям.
Напоследок проанализируем свойства самой информационной базы в консоли администрирования кластера 1С:Предприятия. Откроем утилиту администрирования, выберем нужную базу данных и зайдем в ее свойства.
Обратим внимание на параметр «Разрешить выдачу лицензий сервером». Возможны два сценария:
COMConnector может не достучаться до него. Попробуйте временно разрешить выдачу лицензий непосредственно рабочим сервером базы данных или обновите платформу до наиболее стабильного релиза.Таким образом, комбинируя локальную установку платформы, явную настройку параметра UseHWLicenses=1, перенос программных лицензий в общую папку и правильную регистрацию библиотеки через утилиту Windows COM+, мы можем полностью и навсегда решить проблему с получением лицензий COM-соединением в 1С.