Как исправить ошибку «Не найдена лицензия COM-соединением» в 1С?

Системный администратор IT и автоматизация бизнеса
← На главную

При настройке интеграций между различными базами данных 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. Локальная установка платформы и регистрация библиотеки comcntr.dll

Рассмотрим ситуацию, когда платформа 1С запускается из сетевой папки (так называемой «шары»), а на терминальных серверах выложены лишь ярлыки к исполняемому файлу. Такая схема удобна для обновлений, но крайне нежелательна для работы COM-соединений. Для корректной работы COM-компоненты библиотека comcntr.dll должна быть правильно зарегистрирована в реестре локальной операционной системы.

Выполним локальную установку платформы на терминальный сервер и зарегистрируем библиотеку вручную:

  1. Установим платформу 1С:Предприятие локально на сервер (например, в стандартный каталог C:\Program Files (x86)\1cv82\).
  2. Запустим командную строку Windows от имени Администратора.
  3. Выполним команду регистрации библиотеки comcntr.dll, указав точный путь к ней:

regsvr32 "C:\Program Files (x86)\1cv82\8.2.14.540\bin\comcntr.dll"

В случае успешной регистрации операционная система выдаст соответствующее уведомление. Это гарантирует, что при вызове V82.COMConnector Windows обратится к локальной физической библиотеке, а не к сетевому ресурсу.

Решение 2. Принудительное включение поиска аппаратных лицензий

Часто COM-соединение игнорирует аппаратные ключи HASP, установленные в локальной сети, и безуспешно пытается найти программные файлы лицензий. Чтобы исправить это поведение, мы можем явно указать платформе на необходимость использования аппаратной защиты.

Посмотрим на пример конфигурационного файла 1CEStart.cfg. Этот файл отвечает за общие параметры запуска 1С и может находиться как в каталоге общего профиля C:\ProgramData\1C\1CEStart\, так и в индивидуальных профилях пользователей. Нам необходимо отредактировать этот файл:

  1. Откроем файл 1CEStart.cfg с помощью любого текстового редактора.
  2. Найдем строку UseHWLicenses.
  3. Если она имеет значение 0, или вообще отсутствует, обязательно установим ее в значение 1:

UseHWLicenses=1

После сохранения изменений платформа при инициализации COM-объекта будет в обязательном порядке опрашивать ключи HASP.

Решение 3. Установка Aladdin HASP License Manager для аппаратных ключей

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

Для того чтобы COM-соединение успешно определяло сетевые ключи, проанализируем топологию сети и выполним следующие настройки:

  1. На сервере, в который физически установлен USB-ключ HASP, обязательно должна быть запущена служба Aladdin HASP License Manager. Именно она отвечает за вещание ключа в локальную сеть.
  2. На сервере, где выполняется COM-соединение, настроим файл nethasp.ini. Он располагается в папке bin\conf\ установленной платформы 1С.
  3. Откроем этот файл и пропишем явный IP-адрес сервера лицензий в секции [NH_TCPIP], чтобы исключить проблемы с поиском ключа по широковещательным запросам:

[NH_COMMON]
NH_TCPIP = Enabled

[NH_TCPIP]
NH_SERVER_ADDR = 192.168.1.100  ; Здесь укажите IP-адрес сервера с ключом защиты
NH_PORTNUM = 475
NH_TCPIP_METHOD = UDP

Решение 4. Настройка прав доступа к файлам программных лицензий (.lic)

Если ваше предприятие использует программное лицензирование, то главной причиной ошибки COM-соединения чаще всего является ограничение прав доступа ОС Windows.

Разберем эту ситуацию по шагам. Когда администратор активирует программную лицензию, файлы с расширением .lic по умолчанию сохраняются в его личном профиле, например, в каталоге C:\Users\Администратор\AppData\Local\1C\1Cv8\conf\. В то же время процесс COM-соединения может инициироваться службой сервера 1С, работающей под учетной записью USR1CV8, или веб-сервером IIS под учетной записью IUSR. У этих системных пользователей нет прав на чтение папки профиля администратора, из-за чего COM-соединение рапортует об отсутствии лицензий.

Чтобы решить эту проблему, выполним следующие действия:

  1. Перенесем все файлы лицензий *.lic из пользовательских профилей в общий каталог, доступный всей системе: C:\ProgramData\1C\licenses\.
  2. В свойствах этой папки на вкладке «Безопасность» добавим пользователей USR1CV8 (или того пользователя, из-под которого запущена служба сервера 1С) и ИИ_IUSRS (для веб-серверов), предоставив им права на «Чтение» и «Выполнение».

Важное предупреждение о логике поиска программных лицензий: Платформа 1С сканирует папки с лицензиями последовательно. Как только она находит каталог, в котором есть хотя бы один файл *.lic (даже если он пустой, поврежденный или просроченный), поиск в других каталогах прекращается. Поэтому настоятельно рекомендуем собрать все действующие файлы лицензий в одной общей папке C:\ProgramData\1C\licenses\, очистив все остальные каталоги (включая папки в Program Files и профилях пользователей) от устаревших файлов лицензий.

Решение 5. Настройка COM-соединения через службу компонентов Windows (COM+)

Очень часто в 64-битных операционных системах возникает конфликт разрядностей. Например, 64-битный сервер 1С:Предприятия или 64-битный веб-сервер IIS пытается вызвать 32-битную библиотеку comcntr.dll (или наоборот). Из-за этого вызов завершается ошибкой прав доступа или отсутствия лицензии.

Создадим изолированное приложение в Службах компонентов Windows, которое решит проблему разрядности и прав доступа:

  1. Нажмите комбинацию клавиш Win + R, введите dcomcnfg и нажмите Enter. Откроется окно «Службы компонентов».
  2. Перейдите по пути: Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмите правой кнопкой мыши по разделу «Приложения COM+» и выберите Создать -> Приложение.
  4. В мастере создания выберите «Создать новое приложение». Дайте ему понятное имя, например, 1C_COM_Connector.
  5. В качестве способа активации обязательно выберите флаг «Серверное приложение» (это заставит библиотеку работать в отдельном системном процессе dllhost.exe).
  6. На шаге выбора удостоверения укажите конкретного пользователя Windows (например, локального администратора или специально созданную доменную учетную запись), у которого гарантированно есть доступ как к сетевым ключам HASP, так и к каталогам с файлами программных лицензий.
  7. После создания приложения откройте его ветку, найдите папку «Компоненты», нажмите правой кнопкой мыши -> Создать -> Компонент.
  8. Выберите «Установка новых компонентов» и укажите путь к файлу вашей локальной библиотеки comcntr.dll.

Эта настройка позволяет полностью изолировать процесс выполнения COM-соединения и запустить его под учетной записью с максимальными привилегиями доступа к лицензиям.

Решение 6. Настройка параметров информационной базы в консоли сервера

Напоследок проанализируем свойства самой информационной базы в консоли администрирования кластера 1С:Предприятия. Откроем утилиту администрирования, выберем нужную базу данных и зайдем в ее свойства.

Обратим внимание на параметр «Разрешить выдачу лицензий сервером». Возможны два сценария:

Таким образом, комбинируя локальную установку платформы, явную настройку параметра UseHWLicenses=1, перенос программных лицензий в общую папку и правильную регистрацию библиотеки через утилиту Windows COM+, мы можем полностью и навсегда решить проблему с получением лицензий COM-соединением в 1С.

← На главную