Как исправить ошибку «Invalid class string» (0x800401F3) при вызове COM-соединения в 1С

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

При переносе баз данных 1С на новый сервер или обновлении версии платформы системные администраторы часто сталкиваются с ошибкой инициализации внешнего соединения. На экране или в технологическом журнале появляется неприятное сообщение: «Ошибка при вызове конструктора (COMОбъект) -2147221005(0x800401F3): Invalid class string». Данная ошибка означает, что операционная система Windows не смогла найти в реестре зарегистрированный COM-класс, соответствующий запрашиваемому идентификатору (обычно это V83.COMConnector).

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

Выясняем причины возникновения ошибки

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

  1. Несоответствие разрядности. Служба «Агент сервера 1С:Предприятия» на новом сервере запущена как 64-разрядный процесс. Если на сервере зарегистрирована только 32-разрядная компонента comcntr.dll, 64-битный рабочий процесс сервера 1С не сможет к ней обратиться.
  2. Отсутствие регистрации библиотеки. При установке платформы 1С на сервер компонент интеграции не был зарегистрирован в операционной системе автоматически, либо при установке забыли отметить галочкой установку COM-соединения.
  3. Проблемы с путями в реестре. На сервере установлено несколько версий платформы 1С. При удалении старых версий или некорректной установке новых пути в реестре запутались и указывают на несуществующие каталоги.
  4. Ограничения прав доступа. Пользователь операционной системы, от имени которого запущена служба сервера 1С (обычно это локальный пользователь USR1CV8), не имеет прав на запуск COM-компоненты или чтение соответствующих веток реестра.

Шаг 1. Анализируем разрядность платформы и сервера 1С

Посмотрим на пример кода, при выполнении которого на сервере возникает ошибка:


Конектор = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""TestServer"";Ref=""Trade"";Usr=""Администратор"";";
ОткрытиеБазы = Конектор.Connect(ПараметрыПодключения);

Если этот код запускается в серверном модуле, фоновом задании или в контексте управляемого приложения на стороне сервера, его выполнение инициирует процесс rphost.exe. На современных серверах этот процесс практически всегда является 64-разрядным.

Следовательно, операционная система будет искать 64-разрядную версию COM-класса. Если у вас на сервере была развернута только 32-разрядная платформа 1С, вам обязательно потребуется установить 64-разрядную версию платформы аналогичного релиза, чтобы получить доступ к нужной библиотеке comcntr.dll.

Шаг 2. Корректная регистрация comcntr.dll через утилиту regsvr32

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

Чтобы зарегистрировать 64-разрядный COM-класс, выполним следующие действия по шагам:

  1. Откроем командную строку Windows обязательно с правами Администратора (нажав правой кнопкой мыши и выбрав «Запуск от имени администратора»).
  2. Введем команду регистрации, указав точный путь к 64-битной утилите и библиотеке comcntr.dll из каталога установленной 64-разрядной платформы 1С:
    
    C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.22.1709\bin\comcntr.dll"
    
  3. Если на этом же сервере требуется поддержка работы 32-битных клиентов, дополнительно зарегистрируем 32-битную библиотеку:
    
    C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.22.1709\bin\comcntr.dll"
    
  4. Убедимся, что на экране появилось окно с подтверждением успешной регистрации библиотеки.

Шаг 3. Очистка реестра от старых записей

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

  1. Остановим службу «Агент сервера 1С:Предприятия» через консоль управления службами (services.msc), чтобы снять блокировку с системных файлов DLL.
  2. Запустим командную строку от имени Администратора и отменим регистрацию библиотеки для старых и текущей версий платформы, используя ключ /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"
    
  3. После этого заново выполним чистую регистрацию актуальной версии библиотеки, как описано в Шаге 2.
  4. Запустим службу Агента сервера 1С обратно.

Шаг 4. Настройка приложения COM+ в Службе компонентов

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

Рассмотрим этот процесс по шагам:

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

Данная настройка позволяет перенаправить запросы к классу V83.COMConnector через изолированный процесс, работающий с повышенными правами доступа.

Шаг 5. Настройка прав доступа для пользователя USR1CV8

Если служба 1С работает под стандартной ограниченной учетной записью (например, USR1CV8), у этого пользователя может банально не быть прав на чтение ветки реестра, где зарегистрирован COM-класс, либо на запуск самой библиотеки.

Проанализируем и настроим необходимые права:

  1. Откроем редактор реестра Windows (команда regedit в окне Win+R).
  2. Перейдем к разделу HKEY_CLASSES_ROOT\V83.COMConnector. Нажмем правой кнопкой мыши на имя раздела и выберем пункт «Разрешения».
  3. Проверим, добавлен ли в список пользователей USR1CV8. Если нет, добавим его и предоставим права на «Чтение».
  4. Аналогичным образом проверим ветку реестра с идентификатором класса компоненты по пути HKEY_CLASSES_ROOT\CLSID\. Идентификатор класса (GUID) можно найти в свойствах компоненты в службе компонентов COM+.
  5. Предоставим пользователю USR1CV8 права класса «Чтение и выполнение» на физическую папку, в которой установлена платформа 1С (по умолчанию C:\Program Files\1cv8\).

Шаг 6. Использование встроенного инсталлятора 1С

Если ручные операции с реестром и утилитой regsvr32 вызывают затруднения, воспользуемся самым простым и автоматизированным способом — штатным установщиком платформы 1С:Предприятие. При переустановке или изменении состава компонентов инсталлятор сам прописывает все необходимые связи в операционной системе.

Выполним по шагам:

  1. Запустим файл установки платформы setup.exe из дистрибутива вашей текущей версии 1С.
  2. В появившемся окне выберем режим «Изменить» (Modify).
  3. В дереве доступных для установки модулей найдем пункт «COM-соединение» (COM connection).
  4. Убедимся, что напротив этого пункта стоит значок установки на локальный жесткий диск (он не должен быть перечеркнут красным крестиком). Если он отключен, включим его.
  5. Нажмем кнопку «Далее» и завершим установку платформы. Программа автоматически выполнит корректную регистрацию компоненты comcntr.dll в системном реестре Windows с правильными правами доступа.

Выполнение этих последовательных шагов позволит быстро диагностировать причину сбоя и гарантированно восстановить работоспособность COM-соединений между базами данных 1С на новом сервере.

← На главную