Интеграция информационных баз 1С между собой или с внешними приложениями через COM-соединение — распространенная практика. Однако после очередного обновления платформы пользователи часто сталкиваются с ситуацией, когда ранее работавший обмен неожиданно завершается аварийно. При этом запуск под учетной записью с правами локального администратора может проходить успешно, а у рядовых пользователей генерируется системная ошибка: Версия компоненты 'comcntr' отличается от версии корневого модуля 'core83'. Разберем по шагам, почему возникает эта коллизия и как правильно настроить компоненты в операционной системе Windows.
Проанализируем ситуацию, чтобы понять механизм сбоя. Объект V83.COMConnector представляет собой внешнюю динамическую библиотеку comcntr.dll, которая регистрируется в реестре Windows. Когда внешняя программа или другой сеанс 1С выполняет вызов типа Новый COMОбъект("V83.COMConnector"), операционная система обращается к ветке реестра HKEY_CLASSES_ROOT\V83.COMConnector, считывает идентификатор класса CLSID и загружает соответствующий файл DLL.
Конфликт версий и прав возникает по трем основным причинам:
core83), а система подгружает старую библиотеку comcntr.dll из каталога предыдущего релиза.bin новой платформы либо на чтение ключей реестра.Рассмотрим базовый и наиболее быстрый способ решения проблемы — прямую регистрацию библиотеки актуальной версии через системную утилиту regsvr32. Выполнять данную процедуру необходимо строго от имени администратора на том компьютере или сервере, где инициируется соединение.
cmd.exe) с повышенными привилегиями через контекстное меню Запуск от имени администратора.
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
8.3.X.XXXX укажем актуальный релиз платформы.SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
Если после регистрации библиотека по-прежнему выдает ошибки у рядовых пользователей, либо требуется обращаться к 64-битной базе 1С из 32-битного приложения, применим промышленный метод — выделение COM-коннектора в отдельное серверное приложение COM+.
dcomcnfg и нажмем клавишу ввода для открытия оснастки Службы компонентов.V83_COMConnector) и обязательно переключим тип активации в положение Серверное приложение. Это позволит библиотеке выполняться в изолированном системном процессе dllhost.exe.comcntr.dll.Такой подход полностью изолирует сбои: при ошибках внутри COM-соединения рабочий процесс сервера 1С или внешняя система не упадут, а соединение будет гарантированно выполняться от имени выделенного пользователя с необходимыми правами.
Разберем важные архитектурные ограничения, с которыми связано использование технологии COM в современных системах:
V83.COMConnector невозможно.comcntr.dll может удерживать память в рамках процесса вплоть до его перезапуска.Если вы проектируете новую интеграцию или модернизируете старую, рекомендуется отказаться от COM-соединений в пользу современных кроссплатформенных механизмов платформы 1С:Предприятие: HTTP-сервисов (собственные REST API с передачей JSON или XML), стандартного интерфейса OData или классических Web-сервисов (SOAP). Эти технологии стабильны, платформонезависимы и не вызывают проблем с регистрацией системных DLL при обновлениях.