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

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

При переходе на 64-битную версию платформы «1С:Предприятие» или при обновлении релизов ИТ-специалисты часто сталкиваются с проблемой настройки COM-соединения. Во время попытки программного подключения к базе данных система выдает критическую ошибку: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса». При этом стандартная регистрация библиотеки через утилиту regsvr32 рапортует об успешном завершении операции, но сама проблема не исчезает.

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

Причина ошибки: конфликт разрядностей и путаница в системных папках Windows

Основной источник проблемы заключается в несовместимости 32-битных и 64-битных процессов, а также в путанице с системными утилитами регистрации в семействе ОС Windows. Рассмотрим эту ситуацию подробнее.

Для обеспечения обратной совместимости в 64-битных версиях Windows используются два параллельных пространства для исполняемых файлов и библиотек:

Если мы пытаемся зарегистрировать 64-битную библиотеку comcntr.dll (которая по умолчанию находится в папке Program Files\1cv8\...) с помощью утилиты regsvr32 из каталога SysWOW64, операционная система вносит записи не в ту ветку реестра. В результате 64-битное приложение 1С при попытке инициализировать COMОбъект обращается к 64-битному разделу реестра, не находит там соответствующего класса и возвращает ошибку 0x800401F3.

Решение №1: Правильная перерегистрация библиотеки через regsvr32

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

Разберем по шагам процесс перерегистрации для 64-битной платформы:

  1. Закройте все запущенные сеансы «1С:Предприятия» и остановите службу «Агент сервера 1С:Предприятия», если действия выполняются на сервере.
  2. Откройте меню «Пуск», введите в поиске cmd, нажмите правой кнопкой мыши на «Командная строка» и выберите пункт «Запуск от имени администратора». Это обязательное условие, так как обычный пользователь не имеет прав на запись в системные ветки реестра.
  3. Перед регистрацией новой библиотеки крайне важно полностью удалить старые некорректные записи («хвосты» реестра). Выполните команду отмены регистрации (разрегистрации) с ключом /u:

C:\Windows\System32\regsvr32.exe /u "C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll"
  1. После успешного отключения старой библиотеки выполните повторную регистрацию, используя правильный путь к утилите regsvr32:

C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll"

На экране должно появиться диалоговое окно с подтверждением: «Успешное выполнение DllRegisterServer в...». После этого перезапустите службу сервера 1С и проверьте работоспособность COM-соединения.

Решение №2: Настройка приложения в Службах компонентов COM+ («Тяжелая артиллерия»)

Что делать, если на одном компьютере или сервере должны одновременно работать и 32-битные, и 64-битные приложения, обращающиеся к 1С через COM? В этом случае обычная регистрация через regsvr32 не поможет, так как одна из сторон всегда будет получать ошибку совместимости разрядностей. Решением является запуск библиотеки comcntr.dll в изолированном системном процессе Windows — dllhost.exe (DCOM).

Проанализируем и выполним этот процесс по шагам:

  1. Нажмите комбинацию клавиш Win + R, введите команду dcomcnfg и нажмите Enter. Откроется окно «Службы компонентов».
  2. В левой части окна разверните дерево: Службы компонентов -> Компьютеры -> Мой компьютер.
  3. Найдите папку «Приложения COM+», нажмите на нее правой кнопкой мыши и выберите Создать -> Приложение.
  4. В открывшемся мастере установки нажмите кнопку «Далее», затем выберите пункт «Создать новое приложение».
  5. Введите понятное имя для приложения (например, V83_COMConnector). В группе «Способ активации» обязательно установите переключатель в положение «Серверное приложение» (Server application). Нажмите «Далее».
  6. На этапе выбора учетной записи для запуска приложения укажите конкретного пользователя. Рекомендуется использовать специально созданную локальную учетную запись администратора компьютера или доменную учетную запись, из-под которой работает служба сервера 1С. Использование системной учетной записи «Локальная служба» может привести к нехватке прав при обращении к файлам баз данных. Нажмите «Далее» и завершите работу мастера.
  7. Разверните созданное приложение V83_COMConnector в дереве служб компонентов, найдите внутри него папку «Компоненты».
  8. Нажмите правой кнопкой мыши на папку «Компоненты» и выберите Создать -> Компонент.
  9. В мастере нажмите «Далее», выберите пункт «Установка новых компонентов» и укажите путь к файлу comcntr.dll вашей рабочей версии платформы 1С. Например: C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll. Завершите создание компонента.
  10. Теперь необходимо настроить безопасность созданного приложения. Нажмите правой кнопкой мыши на само приложение V83_COMConnector и выберите «Свойства».
  11. Перейдите на вкладку «Безопасность». Снимите флажок «Принудительная проверка доступа для приложений». В уровне ограничений выберите значение «Неограниченный». Нажмите «Применить» и «ОК».
  12. Принудительно перезапустите приложение COM+: нажмите на него правой кнопкой мыши в дереве и выберите команду «Выключить», а затем — «Запустить».

Этот способ позволяет операционной системе Windows автоматически транслировать вызовы между процессами разной разрядности через механизм межпроцессного взаимодействия (RPC), что полностью решает проблему совместимости.

Дополнительные проверки: почему COM-соединение все еще может не работать

Если вы выполнили все вышеописанные действия, но подключение по-прежнему завершается ошибкой, рекомендуем проанализировать следующие сопутствующие факторы:

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

← На главную