К статье
Практический материал

Администрирование · 10 мин

Как зарегистрировать COM-соединитель 1С

Как зарегистрировать COM-соединитель 1С: regsvr32 для comcntr.dll, утилита RegComConnector, разрядность, типичные ошибки и проверка подключения из скрипта.

COM-соединитель (COMConnector) — это внешняя компонента платформы 1С:Предприятие, которая позволяет обращаться к информационной базе из внешних программ, скриптов VBScript/JScript, PowerShell и других приложений Windows. Чтобы операционная система могла создать объект V83.COMConnector, библиотека comcntr.dll должна быть зарегистрирована в системном реестре. Без этой регистрации любая попытка подключения заканчивается ошибкой «Невозможно создать объект».

Регистрация требуется в нескольких типовых сценариях: после установки платформы 1С без компонента COM-соединения, после обновления версии платформы, при переносе базы на новый сервер, а также когда интеграционный скрипт внезапно перестаёт работать. Процедура занимает несколько минут, но требует прав администратора и понимания разрядности компонентов.

Ниже разобраны все способы регистрации: через команду regsvr32, через штатную утилиту установщика, а также проверка результата, типичные ошибки и ограничения по разрядности и безопасности.

Что такое COM-соединитель и когда нужна регистрация

COM-соединитель — это библиотека comcntr.dll, которая поставляется вместе с платформой 1С:Предприятие и находится в каталоге bin конкретной версии (например, C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll). Через неё внешний код создаёт объект V83.COMConnector, вызывает метод Connect со строкой подключения и получает доступ к объектам базы: справочникам, документам, запросам.

Регистрация — это запись сведений о COM-классе в реестр Windows (ветка HKEY_CLASSES_ROOT\CLSID). Windows по ProgID «V83.COMConnector» находит путь к DLL и загружает её в процесс вызывающего приложения. Если записей нет или они указывают на несуществующий файл, создание объекта завершается ошибкой.

Типовые ситуации, когда регистрация обязательна:

  • платформа установлена без компонента «COM-соединение» (в установщике его можно не выбрать);
  • обновлена версия платформы — старая запись в реестре указывает на удалённый каталог;
  • на одном компьютере стоят несколько версий платформы, и нужно, чтобы внешние скрипты использовали конкретную;
  • интеграция запускается от имени службы или планировщика на сервере, где регистрация не выполнялась.

Способ 1: регистрация через regsvr32

Штатная утилита Windows regsvr32 — основной способ зарегистрировать comcntr.dll. Команда выполняется в командной строке, запущенной от имени администратора. Для 64-разрядной версии библиотеки:

cmd
regsvr32 "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"

Для 32-разрядной библиотеки на 64-разрядной Windows нужно явно вызвать 32-разрядную версию regsvr32 из папки SysWOW64:

cmd
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.22.1709\bin\comcntr.dll"

После успешного выполнения появится диалоговое окно «DllRegisterServer in ... succeeded» (в русской версии — «Успешное выполнение DllRegisterServer»). Если окно не появилось или выдана ошибка — регистрация не выполнена, причину нужно искать по коду ошибки.

Порядок регистрации через regsvr32
  1. 1
    Откройте командную строку от имени администратора (Пуск → cmd → Запуск от имени администратора)
  2. 2
    Определите путь к comcntr.dll нужной версии платформы в каталоге bin
  3. 3
    Выполните regsvr32 с полным путём к DLL, учитывая разрядность
  4. 4
    Убедитесь, что появилось сообщение об успешной регистрации
  5. 5
    Проверьте создание объекта V83.COMConnector тестовым скриптом

Способ 2: установка компонента через установщик платформы

Если comcntr.dll вообще отсутствует в каталоге bin, значит при установке платформы не был выбран компонент COM-соединения. В этом случае регистрировать нечего — сначала нужно доустановить компонент.

Запустите установщик платформы (setup.exe из дистрибутива той же версии), выберите режим «Изменить» и в дереве компонентов отметьте «COM-соединение» (в некоторых версиях — «Внешнее соединение»). Установщик скопирует библиотеку и, как правило, сам выполнит её регистрацию. После завершения проверьте наличие файла в каталоге bin и при необходимости дополнительно выполните regsvr32.

Этот способ предпочтителен на серверах, где платформу обновляют централизованно: ручная регистрация через regsvr32 после каждого обновления легко забывается, а переустановка компонента из дистрибутива воспроизводима.

Разрядность: главный источник проблем

COM-класс регистрируется в разделе реестра, соответствующем разрядности библиотеки. 32-разрядное приложение (например, 32-битный офисный пакет или 32-битный wscript) увидит только 32-разрядную регистрацию, а 64-разрядное — только 64-разрядную. Несовпадение разрядности — причина большинства ошибок «класс не зарегистрирован».

Какая регистрация нужна

64-разрядная comcntr.dll

Для 64-битных вызывающих приложений: 64-битный PowerShell, 64-битный wscript/cscript. Регистрируется через System32\regsvr32.exe

32-разрядная comcntr.dll

Для 32-битных приложений: 32-битный MS Office, 32-битные скрипты на 64-битной ОС. Регистрируется через SysWOW64\regsvr32.exe

Обе регистрации одновременно

Допустимо и часто удобно на сервере, где разные интеграции используют разную разрядность. Конфликта между ними нет

Проверить разрядность исполняемого скрипта просто: по умолчанию на 64-битной Windows wscript и cscript из System32 — 64-разрядные, а их копии в SysWOW64 — 32-разрядные. Если скрипт работает при запуске одним интерпретатором и падает при запуске другим — дело именно в разрядности регистрации.

Проверка результата

После регистрации нужно убедиться, что объект создаётся и подключение к базе выполняется. Простейший тест на VBScript:

Dim connector, connection

Set connector = CreateObject("V83.COMConnector")

Set connection = connector.Connect("File=""C:\Bases\Test"";Usr=""Администратор"";")

WScript.Echo "Подключение успешно: " & connection.Метаданные().Имя

Сохраните код в файл test.vbs и запустите командой cscript test.vbs (или его 32-разрядной версией из SysWOW64 — в зависимости от того, какую регистрацию проверяете). Успешный вывод имени конфигурации означает, что и регистрация, и строка подключения корректны.

Контрольные точки

Как проверить регистрацию

Сообщение regsvr32
Норма

Окно об успешном выполнении DllRegisterServer

Тревожный признак

Ошибка 0x80070005 (нет прав) или 0x80004005

Создание объекта в скрипте
Норма

CreateObject("V83.COMConnector") выполняется без ошибок

Тревожный признак

Ошибка «Невозможно создание объекта» / 0x80040154

Подключение к базе
Норма

Метод Connect возвращает объект соединения

Тревожный признак

Ошибка создания информационной базы — проверяйте строку подключения

Файл comcntr.dll
Норма

Файл существует по пути, указанному при регистрации

Тревожный признак

Платформа обновлена, каталог старой версии удалён

Типичные ошибки и их причины

Ошибка 0x80070005 (E_ACCESSDENIED) при regsvr32 — командная строка запущена без прав администратора. Перезапустите консоль с повышением прав.

Ошибка «Класс не зарегистрирован» (0x80040154) при создании объекта — регистрация выполнена не для той разрядности, которую использует вызывающее приложение, либо запись в реестре указывает на удалённый каталог версии. Проверьте путь в реестре и повторите регистрацию актуальной DLL.

Ошибка «Модуль загружен, но точка входа DllRegisterServer не найдена» — по указанному пути лежит не та DLL (например, случайно указан файл из другого каталога или повреждённый дистрибутив). Переустановите компонент из дистрибутива платформы.

Типичные ошибки
01
Регистрация без прав администратора — regsvr32 возвращает 0x80070005, запись в реестр не создаётся
02
Регистрация 32-битной DLL через 64-битный regsvr32 и наоборот — вызывающее приложение не находит класс
03
Использование пути к старой версии платформы после обновления — объект создаётся, но подключение падает или используется устаревшая компонента
04
Работа с файловой базой, открытой монопольно другим сеансом — Connect завершается ошибкой доступа, хотя регистрация исправна

Ограничения и безопасность

COM-соединение создаёт полноценный сеанс с базой: оно занимает клиентскую лицензию (в клиент-серверном режиме) и выполняет код с правами указанного пользователя. Не храните пароль в открытом виде в скриптах — используйте учётную запись с минимально необходимыми правами и ограничьте доступ к файлу скрипта.

Учтите ограничения технологии: COM-соединитель работает только на Windows, требует совпадения версии библиотеки с версией сервера 1С (для клиент-серверного режима) и не подходит для высоконагруженных сценариев — там лучше использовать HTTP-сервисы или веб-сервисы 1С. Для разовых выгрузок, регламентных обменов и обслуживания баз COM остаётся рабочим и простым вариантом.

Итог

Что важно запомнить

COM-соединитель регистрируется командой regsvr32 для comcntr.dll из каталога bin нужной версии платформы с правами администратора. Разрядность regsvr32 должна совпадать с разрядностью DLL и вызывающего приложения. Результат проверяется тестовым скриптом, создающим V83.COMConnector и выполняющим Connect к базе.

Частые вопросы

Чем отличаются V82.COMConnector и V83.COMConnector?

Это ProgID COM-соединителей платформ 8.2 и 8.3 соответственно. Для платформы 8.3 всегда используется V83.COMConnector; имя V82.COMConnector оставлено для совместимости со старыми решениями на платформе 8.2.

Можно ли зарегистрировать COM-соединитель без прав администратора?

Стандартная регистрация через regsvr32 требует прав администратора, так как пишет в HKEY_CLASSES_ROOT. Обходные схемы с регистрацией в разделе пользователя теоретически возможны, но не поддерживаются штатно и не рекомендуются для рабочих сред.

После обновления платформы скрипт перестал работать. Что делать?

Каталог старой версии был удалён, а запись в реестре указывает на него. Выполните regsvr32 для comcntr.dll из каталога bin новой версии платформы и повторите тест подключения.

Работает ли COM-соединитель на Linux?

Нет, COM — технология Windows. На Linux-серверах для интеграции используют HTTP-сервисы, веб-сервисы или механизм внешних источников данных.

Можно ли использовать COM-соединитель из 1С для подключения к другой базе 1С?

Да, это частый сценарий обмена между базами: в коде 1С создаётся объект COMConnector через COMОбъект("V83.COMConnector"), затем выполняется Connect со строкой подключения к целевой базе. Учтите, что сеанс занимает лицензию и держит соединение, пока объект не освобождён.

Что делать, если regsvr32 сообщает об успехе, но объект не создаётся?

Проверьте разрядность вызывающего приложения и зарегистрированной DLL — чаще всего они не совпадают. Запустите скрипт 32-разрядным интерпретатором из SysWOW64 или зарегистрируйте библиотеку нужной разрядности.