При переходе на 64-битную версию платформы «1С:Предприятие» или при обновлении релизов ИТ-специалисты часто сталкиваются с проблемой настройки COM-соединения. Во время попытки программного подключения к базе данных система выдает критическую ошибку: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса». При этом стандартная регистрация библиотеки через утилиту regsvr32 рапортует об успешном завершении операции, но сама проблема не исчезает.
В этой статье мы подробно проанализируем причины возникновения данной ошибки, разберем архитектурные особенности операционной системы Windows, влияющие на COM-соединение, и пошагово реализуем несколько способов решения проблемы — от простых команд до настройки изолированного серверного приложения в службах компонентов COM+.
Основной источник проблемы заключается в несовместимости 32-битных и 64-битных процессов, а также в путанице с системными утилитами регистрации в семействе ОС Windows. Рассмотрим эту ситуацию подробнее.
Для обеспечения обратной совместимости в 64-битных версиях Windows используются два параллельных пространства для исполняемых файлов и библиотек:
C:\Windows\System32) содержит файлы и утилиты исключительно для 64-битных приложений.C:\Windows\SysWOW64) содержит файлы и утилиты для 32-битных приложений. Название расшифровывается как «Windows on Windows 64-bit».Если мы пытаемся зарегистрировать 64-битную библиотеку comcntr.dll (которая по умолчанию находится в папке Program Files\1cv8\...) с помощью утилиты regsvr32 из каталога SysWOW64, операционная система вносит записи не в ту ветку реестра. В результате 64-битное приложение 1С при попытке инициализировать COMОбъект обращается к 64-битному разделу реестра, не находит там соответствующего класса и возвращает ошибку 0x800401F3.
Выяснив причину путаницы, мы можем исправить регистрацию в реестре с помощью командной строки. Главное правило, которое необходимо запомнить:
Program Files, и регистрировать ее нужно через 64-битную утилиту из папки System32.Program Files (x86), и регистрировать ее необходимо через 32-битную утилиту из папки SysWOW64.Разберем по шагам процесс перерегистрации для 64-битной платформы:
cmd, нажмите правой кнопкой мыши на «Командная строка» и выберите пункт «Запуск от имени администратора». Это обязательное условие, так как обычный пользователь не имеет прав на запись в системные ветки реестра./u:
C:\Windows\System32\regsvr32.exe /u "C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll"
regsvr32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll"
На экране должно появиться диалоговое окно с подтверждением: «Успешное выполнение DllRegisterServer в...». После этого перезапустите службу сервера 1С и проверьте работоспособность COM-соединения.
Что делать, если на одном компьютере или сервере должны одновременно работать и 32-битные, и 64-битные приложения, обращающиеся к 1С через COM? В этом случае обычная регистрация через regsvr32 не поможет, так как одна из сторон всегда будет получать ошибку совместимости разрядностей. Решением является запуск библиотеки comcntr.dll в изолированном системном процессе Windows — dllhost.exe (DCOM).
Проанализируем и выполним этот процесс по шагам:
Win + R, введите команду dcomcnfg и нажмите Enter. Откроется окно «Службы компонентов».V83_COMConnector). В группе «Способ активации» обязательно установите переключатель в положение «Серверное приложение» (Server application). Нажмите «Далее».V83_COMConnector в дереве служб компонентов, найдите внутри него папку «Компоненты».comcntr.dll вашей рабочей версии платформы 1С. Например: C:\Program Files\1cv8\8.3.16.1063\bin\comcntr.dll. Завершите создание компонента.V83_COMConnector и выберите «Свойства».Этот способ позволяет операционной системе Windows автоматически транслировать вызовы между процессами разной разрядности через механизм межпроцессного взаимодействия (RPC), что полностью решает проблему совместимости.
Если вы выполнили все вышеописанные действия, но подключение по-прежнему завершается ошибкой, рекомендуем проанализировать следующие сопутствующие факторы:
comcntr.dll физически присутствует в папке bin нужного релиза платформы. Если его там нет, запустите установку платформы заново в режиме «Изменить» и принудительно отметьте пункт «COM-соединение» для установки на локальный диск.regsvr32, классифицируя попытку изменения ветки реестра HKEY_CLASSES_ROOT\CLSID как потенциальную угрозу. На время регистрации библиотеки рекомендуется временно отключить защиту антивируса или добавить исполняемые файлы 1С в список исключений.services.msc.Применяя данные подходы, мы гарантированно восстановим работоспособность механизмов интеграции и обеспечим надежный обмен данными между различными информационными базами 1С:Предприятия.