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

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке синхронизации между базами (например, ЗУП и БП) на серверном кластере администраторы часто сталкиваются с ошибкой: Ошибка при вызове конструктора (COMObject): -2147221005(0x800401F3): Недопустимая строка с указанием класса. Эта проблема особенно актуальна для 64-битных платформ, так как стандартная компонента comcntr.dll требует специфической регистрации в операционной системе, чтобы серверный процесс 1С мог к ней обратиться. Рассмотрим подробно, как решить эту задачу и обеспечить стабильную работу обмена.

Причина возникновения ошибки

Разберем ситуацию: сервер 1С работает как 64-битное приложение. Когда в коде вызывается Новый COMObject("V83.COMConnector"), операционная система пытается найти в реестре зарегистрированный класс с таким программным идентификатором (ProgID). Если компонента зарегистрирована некорректно или у пользователя, от имени которого запущен сервер 1С (обычно это USR1CV8), нет прав на чтение соответствующих веток реестра или запуск компоненты, возникает вышеуказанная ошибка.

Проанализируем основные причины:

  1. Разрядность: Попытка использовать 32-битную компоненту в 64-битном процессе без суррогатного приложения COM+.
  2. Регистрация: Библиотека comcntr.dll не зарегистрирована в системном реестре через regsvr32.
  3. Права доступа: Учетная запись USR1CV8 не имеет прав на запуск и активацию DCOM-объекта.

Шаг 1. Регистрация компоненты в операционной системе

Первым делом нам необходимо убедиться, что библиотека comcntr.dll зарегистрирована. Важно использовать библиотеку именно той версии платформы, на которой работает сервер. Рассмотрим процесс регистрации для 64-битной системы.

Откроем командную строку (CMD) от имени администратора и выполним регистрацию. Обратите внимание на путь — он должен соответствовать вашей версии 1С:

regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"

Если вы используете 32-битный клиент на 64-битной системе для локальных тестов, также может потребоваться регистрация 32-битной версии:


C:\Windows\SysWOW64\regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"

После успешной регистрации должно появиться сообщение «DllRegisterServer в ... успешно завершено».

Шаг 2. Создание и настройка приложения COM+

Поскольку 64-битный сервер 1С часто не может напрямую взаимодействовать с компонентой (особенно если есть нюансы в версиях), лучшим решением будет создание «обертки» в виде приложения COM+. Это позволит компоненте запускаться в отдельном процессе dllhost.exe.

Рассмотрим пошагово процесс настройки:

  1. Откроем Панель управления -> Администрирование -> Службы компонентов.
  2. Перейдем в ветку: Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Нажмем правую кнопку мыши, выберем Создать -> Приложение.
  4. В мастере выберем Создать новое приложение, введем имя (например, 1Cv8_COMConnector) и выберем тип Серверное приложение.
  5. В окне выбора учетной записи для запуска укажем Данный пользователь и введем данные учетной записи USR1CV8 и ее пароль. Это критически важно, так как под «Интерактивным пользователем» компонента на сервере работать не будет.

Шаг 3. Добавление компоненты в приложение

Теперь внутрь созданного приложения нужно добавить саму библиотеку comcntr.dll:

  1. Развернем созданное приложение 1Cv8_COMConnector, найдем папку Компоненты.
  2. Нажмем правую кнопку, выберем Создать -> Компонент.
  3. Выберем Установка новых компонентов и укажем путь к comcntr.dll в папке bin вашей платформы.

Шаг 4. Тонкая настройка безопасности

Проанализируем ситуацию, когда компонента добавлена, но ошибка сохраняется. Часто это связано с тем, что механизмы безопасности Windows блокируют доступ. Выполним следующие действия:

Зайдем в свойства созданного приложения COM+:

Зайдем в свойства самого компонента (внутри приложения):

Шаг 5. Проверка прав в реестре

Иногда даже после настройки COM+ пользователь USR1CV8 не может считать данные о классе. Нам нужно убедиться, что права на ветку реестра выданы корректно. Проверим следующие разделы в regedit:

Найдем ветку HKEY_CLASSES_ROOT\CLSID\{B5C52FDE-4409-4923-96E8-D113E4014C92} (идентификатор может варьироваться, ориентируйтесь на поиск по слову V83.COMConnector). Нажмите правую кнопку мыши на разделе -> Разрешения. Убедитесь, что у группы Пользователи или конкретно у USR1CV8 есть права на Чтение.

Шаг 6. Тестирование с помощью PowerShell

Для того чтобы исключить ошибки в самом коде 1С, мы можем проверить работоспособность COM-объекта через PowerShell. Важно запускать тест от имени того пользователя, который запускает службу 1С. Рассмотрим пример команды:


$connection = New-Object -ComObject "V83.COMConnector"
$connection | Get-Member

Если команда возвращает список методов объекта (Connect, ConnectAgent и др.), значит, регистрация прошла успешно. Если же возвращается ошибка об отсутствии класса, проблему нужно искать в шагах 1 и 2.

Итоговые рекомендации

Выясним причину, почему иногда синхронизация работает под администратором, но не работает под системным пользователем. Это всегда вопрос прав на запуск DCOM. Если после всех манипуляций ошибка сохраняется, попробуйте следующее:

Таким образом, правильная настройка заключается в комбинации регистрации DLL, создании суррогатного приложения COM+ с правильным «Удостоверением» и проверке прав доступа в реестре и файловой системе.

← На главную