Как исправить ошибку создания COM-объекта V83.COMConnector на 64-битных серверах 1С?

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

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

В этой статье мы подробно разберем, почему возникает эта проблема, как правильно регистрировать компоненты в системе и каким образом обеспечить стабильную работу механизмов администрирования в смешанной среде (32-битные клиенты и 64-битный сервер).

Анализ причин возникновения ошибки

Разберем природу ошибки 0x800401F3. Она означает, что операционная система Windows не может найти в реестре программный идентификатор (ProgID) V83.COMConnector. Основная сложность заключается в разрядности процессов. В 64-битных операционных системах реестр разделен на две части: для 64-битных и для 32-битных (WOW64) приложений. Если библиотека зарегистрирована только для одной архитектуры, приложение другой архитектуры ее просто «не увидит».

Вторая проблема — ошибка Метод объекта не обнаружен (ConnectAgent). Она обычно возникает, когда вместо компактного COMConnector по ошибке создается объект Application, либо когда происходит попытка обращения к методам административного интерфейса через объект, который не был должным образом инициализирован в контексте 64-битного сервера.

Способ 1. Ручная регистрация comcntr.dll для нужной разрядности

Первым делом проверим правильность регистрации библиотеки. На 64-битном сервере библиотека comcntr.dll находится в двух разных папках (если установлены оба клиента) или только в Program Files. Проанализируем путь к файлу для платформы 8.3.12.1567:

Для регистрации выполним следующие шаги. Запустим командную строку (CMD) от имени администратора. Рассмотрим команды для регистрации 64-битной компоненты:


cd "C:\Windows\System32"
regsvr32 "C:\Program Files\1cv8\8.3.12.1567\bin\comcntr.dll"

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


cd "C:\Windows\SysWOW64"
regsvr32 "C:\Program Files (x86)\1cv8\8.3.12.1567\bin\comcntr.dll"

Важный нюанс: при установке платформы 8.3.12.1567 x64 регистрация часто не происходит автоматически. Ручная перерегистрация решает проблему "Недопустимой строки с указанием класса" в большинстве случаев.

Способ 2. Настройка COM+ (Surrogate Process)

Если в вашей инфраструктуре используется 64-битный сервер 1С, а запуск обработки происходит из 32-битного клиентского приложения (или наоборот), стандартная регистрация может не помочь из-за конфликта разрядности процессов. В этом случае мы воспользуемся механизмом COM+ (обертка в виде dllhost.exe).

Разберем пошагово процесс настройки «суррогатного» процесса:

  1. Откроем Панель управления — Администрирование — Службы компонентов.
  2. Перейдем в ветку Компьютеры — Мой компьютер — Приложения COM+.
  3. Нажмем правую кнопку мыши и выберем Создать — Приложение.
  4. В мастере выберем Создать новое приложение, укажем имя (например, 1C_COM_Connector) и выберем тип Серверное приложение.
  5. На вкладке Учетная запись укажем пользователя, под которым запускается служба Агент сервера 1С:Предприятие. Это критично для доступа к ресурсам кластера.
  6. В созданном приложении зайдем в папку Компоненты, нажмем Создать — Компонент.
  7. Выберем Установка новых компонентов и укажем путь к comcntr.dll из папки bin 64-битной платформы.

После этого в свойствах созданного компонента нужно найти CLSID (уникальный идентификатор). Теперь при вызове в коде 1С система будет перенаправлять запрос в отдельный процесс dllhost.exe, который успешно свяжет 32-битную и 64-битную архитектуры.

Способ 3. Корректная работа с портами и методами агента

Часто проблема кроется в самом программном коде. Обратим внимание на пример кода, который использовал автор темы для работы с нестандартным портом (2141). Рассмотрим правильную последовательность инициализации соединения:


// Инициализация соединителя
Попытка
    // Используем универсальный метод получения имени COM-соединителя
    ИмяCOM = "V83.COMConnector"; 
    COMСоединитель = Новый COMОбъект(ИмяCOM);
Исключение
    Сообщить("Не удалось создать COM-объект " + ИмяCOM + ". Проверьте регистрацию comcntr.dll");
    Возврат;
КонецПопытки;

// Подключение к агенту сервера с учетом порта
Попытка
    // Важно: порт агента (ragent) по умолчанию 1540, 
    // но в строке подключения нужно указывать адрес сервера и порт через двоеточие
    АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера + ":2141");
Исключение
    Сообщить("Ошибка подключения к агенту сервера: " + ОписаниеОшибки());
КонецПопытки;

Проанализируем ситуацию с ошибкой Метод объекта не обнаружен (ConnectAgent). Если вы видите такую ошибку, убедитесь, что переменная COMСоединитель действительно является объектом V83.COMConnector. Если в системе зарегистрирован только V83.Application, 1С может попытаться создать его в качестве "запасного" варианта, но у объекта Application (запускающего окно программы) нет метода ConnectAgent. Этот метод есть только у легковесного COM-соединителя.

Альтернативный подход: Переход на RAS/RAC

Выясним, почему в современных конфигурациях, таких как ERP, эта проблема встречается реже. Платформа 1С:Предприятие предлагает более современный механизм администрирования — RAS (Remote Administration Service) и утилиту RAC.

Этот способ не использует технологию COM, а работает через TCP-порты (по умолчанию 1545). Проанализируем преимущества этого метода:

Если ваша задача — регулярное управление сеансами, рекомендуем рассмотреть настройку службы ras.exe на сервере. В коде 1С это реализуется через запуск внешнего приложения rac.exe с параметрами или через использование объектов типа АдминистрированиеКластера, доступных в последних версиях БСП.

Резюме и рекомендации

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

  1. Проверьте регистрацию: Запустите regsvr32 для 64-битной comcntr.dll от имени администратора.
  2. Устраните конфликт разрядности: Если клиент 32-битный, а сервер 64-битный, настройте приложение в COM+.
  3. Проверьте порты: При использовании нестандартных портов (например, 2141) убедитесь, что они явно указаны в параметрах метода ConnectAgent.
  4. Используйте правильный объект: В коде должен фигурировать именно V83.COMConnector, а не V83.Application.

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

← На главную