При переносе баз данных 1С на новый сервер или обновлении версии платформы системные администраторы часто сталкиваются с ошибкой инициализации внешнего соединения. На экране или в технологическом журнале появляется неприятное сообщение: «Ошибка при вызове конструктора (COMОбъект) -2147221005(0x800401F3): Invalid class string». Данная ошибка означает, что операционная система Windows не смогла найти в реестре зарегистрированный COM-класс, соответствующий запрашиваемому идентификатору (обычно это V83.COMConnector).
В этой статье мы подробно разберем, почему возникает эта неполадка, и рассмотрим пошаговые методы ее диагностики и устранения. Мы проанализируем разрядность процессов, научимся правильно использовать утилиту регистрации библиотек, настроим права доступа и разберем создание изолированного приложения COM+.
Прежде чем приступать к исправлению, давайте проанализируем ситуацию и поймем, из-за чего операционная система выдает ошибку класса. Основных причин может быть несколько:
comcntr.dll, 64-битный рабочий процесс сервера 1С не сможет к ней обратиться.USR1CV8), не имеет прав на запуск COM-компоненты или чтение соответствующих веток реестра.Посмотрим на пример кода, при выполнении которого на сервере возникает ошибка:
Конектор = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""TestServer"";Ref=""Trade"";Usr=""Администратор"";";
ОткрытиеБазы = Конектор.Connect(ПараметрыПодключения);
Если этот код запускается в серверном модуле, фоновом задании или в контексте управляемого приложения на стороне сервера, его выполнение инициирует процесс rphost.exe. На современных серверах этот процесс практически всегда является 64-разрядным.
Следовательно, операционная система будет искать 64-разрядную версию COM-класса. Если у вас на сервере была развернута только 32-разрядная платформа 1С, вам обязательно потребуется установить 64-разрядную версию платформы аналогичного релиза, чтобы получить доступ к нужной библиотеке comcntr.dll.
Многие администраторы допускают ошибку, запуская команду регистрации из произвольного каталога или используя утилиту не той разрядности. В 64-битных версиях Windows существует важный нюанс:
C:\Windows\System32\ содержит **64-битные** системные утилиты.C:\Windows\SysWOW64\ содержит **32-битные** системные утилиты.Чтобы зарегистрировать 64-разрядный COM-класс, выполним следующие действия по шагам:
comcntr.dll из каталога установленной 64-разрядной платформы 1С:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.22.1709\bin\comcntr.dll"
Если на сервере ранее выполнялись переустановки платформы 1С разных версий, новые параметры регистрации могли наложиться на устаревшие ключи реестра. Рекомендуется провести предварительную очистку:
services.msc), чтобы снять блокировку с системных файлов DLL./u:
C:\Windows\System32\regsvr32.exe /u "C:\Program Files\1cv8\8.3.20.1674\bin\comcntr.dll"
C:\Windows\System32\regsvr32.exe /u "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
В некоторых случаях прямая регистрация библиотеки в операционной системе не решает проблему. Это происходит из-за строгой политики безопасности Windows или когда необходимо обеспечить совместную работу 32-разрядных и 64-разрядных процессов. В такой ситуации идеальным решением является создание изолированного приложения COM+ (так называемой «обертки»), которая будет запускать компонент в отдельном процессе dllhost.exe.
Рассмотрим этот процесс по шагам:
dcomcnfg и нажмем Enter.1C_COM_Connector.comcntr.dll, расположенному в каталоге bin установленной платформы 1С.Данная настройка позволяет перенаправить запросы к классу V83.COMConnector через изолированный процесс, работающий с повышенными правами доступа.
Если служба 1С работает под стандартной ограниченной учетной записью (например, USR1CV8), у этого пользователя может банально не быть прав на чтение ветки реестра, где зарегистрирован COM-класс, либо на запуск самой библиотеки.
Проанализируем и настроим необходимые права:
regedit в окне Win+R).HKEY_CLASSES_ROOT\V83.COMConnector. Нажмем правой кнопкой мыши на имя раздела и выберем пункт «Разрешения».USR1CV8. Если нет, добавим его и предоставим права на «Чтение».HKEY_CLASSES_ROOT\CLSID\. Идентификатор класса (GUID) можно найти в свойствах компоненты в службе компонентов COM+.USR1CV8 права класса «Чтение и выполнение» на физическую папку, в которой установлена платформа 1С (по умолчанию C:\Program Files\1cv8\).Если ручные операции с реестром и утилитой regsvr32 вызывают затруднения, воспользуемся самым простым и автоматизированным способом — штатным установщиком платформы 1С:Предприятие. При переустановке или изменении состава компонентов инсталлятор сам прописывает все необходимые связи в операционной системе.
Выполним по шагам:
setup.exe из дистрибутива вашей текущей версии 1С.comcntr.dll в системном реестре Windows с правильными правами доступа.Выполнение этих последовательных шагов позволит быстро диагностировать причину сбоя и гарантированно восстановить работоспособность COM-соединений между базами данных 1С на новом сервере.