При настройке программной интеграции с 1С:Предприятием через COM-соединение часто возникает ситуация: мы успешно выполняем команду регистрации библиотеки comcntr.dll с помощью системной утилиты regsvr32, получаем сообщение об успехе, однако при открытии оснастки «Службы компонентов» (Component Services / dcomcnfg) нужный компонент V83.COMConnector в списке отсутствует. Разберем подробно, почему так происходит, как устроена регистрация внутрипроцессных серверов и в каких случаях действительно требуется ручная настройка COM+.
Проанализируем базовый принцип работы утилиты regsvr32. Данная программа предназначена исключительно для вызова функций саморегистрации внутрипроцессных COM-серверов (ActiveX, DLL) в системном реестре Windows. При успешном выполнении команды данные о библиотеке записываются в ветки реестра HKEY_CLASSES_ROOT\CLSID и HKEY_CLASSES_ROOT\V83.COMConnector.
Оснастка «Службы компонентов» управляет специализированными COM+-приложениями, работающими в изолированных процессах (dllhost.exe), с пулами потоков, ролевой безопасностью и поддержкой транзакций. Вызов regsvr32 не создает и не должен создавать отдельное приложение в оснастке «Службы компонентов». Если библиотека успешно зарегистрирована в реестре, объект V83.COMConnector уже готов к работе и может вызываться из программного кода 1С или внешних скриптов.
Для того чтобы соединитель работал без сбоев, необходимо учитывать разрядность операционной системы и установленной платформы 1С. Запуск командной строки обязательно следует выполнять от имени администратора.
Разберем по шагам регистрацию в зависимости от разрядности:
Используем 64-битную версию утилиты из системной папки System32:
C:\Windows\System32\regsvr32.exe "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll"
В 64-разрядных системах для регистрации 32-битных библиотек в ветке SysWOW64 необходимо явно вызывать утилиту из каталога SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\comcntr.dll"
В некоторых случаях для обновления системных связей после смены версии платформы полезно выполнить команду перерегистрации исполняемого файла клиента:
"C:\Program Files\1cv8\8.3.X.XXXX\bin\1cv8.exe" /RegServer
Ручное добавление компонента в оснастку dcomcnfg требуется только в специфических сценариях архитектуры:
Рассмотрим пошаговый процесс создания COM+-приложения, если такая необходимость возникла:
dcomcnfg.1C_V83_COMConnector) и выбираем тип активации Серверное приложение.comcntr.dll из каталога bin установленной платформы 1С.После регистрации библиотеки в реестре (или настройки в COM+) проверим подключение из программного кода 1С:
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""Server1C"";Ref=""TestBase"";Usr=""Администратор"";Pwd=""Password"";";
БазаПодключение = COMСоединитель.Connect(ПараметрыПодключения);
Сообщить("Подключение успешно установлено!");
Исключение
Сообщить("Ошибка инициализации COM-соединения: " + ОписаниеОшибки());
КонецПопытки;
Таким образом, факт отсутствия comcntr.dll в службах компонентов после вызова regsvr32 является штатным поведением Windows. Если нет задачи организовывать межразрядный мост или изолированный пул процессов, достаточно стандартной регистрации DLL в реестре через командную строку от имени администратора.