Технология COM-соединения (COMConnector) до сих пор остается одним из ключевых инструментов для программной интеграции баз данных 1С:Предприятие между собой и с внешними информационными системами. Однако администрирование этого компонента в смешанных средах (где одновременно используются 32-битные и 64-битные клиенты, а сервер работает на 64-битной платформе) часто сопровождается трудностями. Одной из типичных проблем является ситуация, когда внешнее соединение успешно инициализируется на стороне клиентских рабочих станций, но наотрез отказывается работать в коде, выполняемом непосредственно на сервере 1С.
В этой статье мы подробно разберем, почему ломается COMConnector, проанализируем неочевидные ошибки утилиты регистрации regsvr32, предоставим готовый автоматизированный скрипт для исправления проблемы, а также рассмотрим альтернативные и более надежные способы настройки окружения.
Рассмотрим классическую ситуацию: служба сервера 1С:Предприятие установлена в 64-разрядном режиме. На сервере также запускаются клиентские приложения обеих разрядностей (х32 и х64). При попытке зарегистрировать библиотеку comcntr.dll стандартной командой regsvr32 администраторы часто совершают несколько критических ошибок:
regsvr32.exe. 64-разрядная версия находится по пути C:\Windows\System32\regsvr32.exe, а 32-разрядная — в папке C:\Windows\SysWOW64\regsvr32.exe. Путаница в путях приводит к тому, что библиотека регистрируется не в той ветке системного реестра./i (инсталляция). Однако для библиотеки comcntr.dll вызов функции установки с этим ключом может отрабатывать некорректно, блокируя создание COM-объекта сервером 1С.rphost.exe) работают в 64-битной среде. Если на сервере зарегистрирована только 32-битная библиотека comcntr.dll из каталога Program Files (x86), серверный процесс не сможет выполнить вызов напрямую из-за ограничений архитектуры.Выясним, как решить эту проблему раз и навсегда с помощью чистой перерегистрации библиотек обеих разрядностей.
Для того чтобы COMConnector стабильно работал и на стороне 32-битных клиентов, и в 64-битных процессах сервера 1С, необходимо корректно зарегистрировать обе версии библиотеки comcntr.dll в соответствующих ветках операционной системы. При этом критически важно не использовать ключ /i при вызове утилиты regsvr32.
Разберем готовый рабочий сценарий командной строки (бат-файл), который сначала полностью очищает старые записи реестра, а затем регистрирует компоненты заново:
set version=8.3.12.1790
set x64=C:\Program Files\1cv8\%version%\bin\comcntr.dll
set x32=C:\Program Files (x86)\1cv8\%version%\bin\comcntr.dll
set reg64=%systemroot%\System32\regsvr32.exe
set reg32=%systemroot%\SysWoW64\regsvr32.exe
:: Полное удаление старых регистраций для 32-битной библиотеки
%reg64% /u /s "%x32%"
%reg32% /u /s "%x32%"
:: Полное удаление старых регистраций для 64-битной библиотеки
%reg64% /u /s "%x64%"
%reg32% /u /s "%x64%"
:: Чистая регистрация библиотек в правильных окружениях
%reg64% /s "%x64%"
%reg32% /s "%x32%"
Рассмотрим подробнее логику работы этого скрипта:
8.3.12.1790, замените ее на вашу актуальную версию) и прописываем полные пути к файлам и утилитам регистрации./u используется для отмены регистрации компонента (разрегистрации). Это позволяет избежать дублирования или наложения некорректных путей в реестре Windows./s (silent) запускает утилиту в «тихом» режиме, отключая вывод диалоговых окон с сообщениями об успешности или ошибках выполнения. Это необходимо для беспрепятственного выполнения скрипта.SysWOW64 — 32-битную библиотеку. Ключ /i исключен из финальных команд, так как именно он зачастую приводил к сбоям на серверной ОС.Важно: Запуск данного бат-файла (или выполнение команд вручную в консоли) необходимо производить строго с правами Администратора операционной системы. Для этого нажмите правой кнопкой мыши по файлу скрипта и выберите пункт «Запуск от имени администратора».
Иногда даже после успешной регистрации библиотек серверные процессы 1С продолжают выдавать ошибки при обращении к COMConnector. Это может быть связано с жесткими политиками безопасности Windows или несовместимостью разрядностей контекстов вызова. В таких случаях наиболее надежным и отказоустойчивым решением является изоляция работы компоненты в отдельном системном процессе dllhost.exe с помощью создания приложения COM+.
Разберем этот процесс по шагам:
Win + R, введите dcomcnfg и нажмите Enter.V83_COMConnector. В качестве способа активации обязательно укажите флаг «Серверное приложение» (это заставит систему запускать библиотеку в изолированном процессе dllhost.exe).USR1CV8 или специальная доменная учетная запись).comcntr.dll (для 64-битного сервера это C:\Program Files\1cv8\Х.Х.Х.Х\bin\comcntr.dll).V83_COMConnector, перейдите на вкладку «Безопасность». Снимите флажок «Принудительная проверка доступа для приложений» и установите «Уровень ограничений» в положение «Неограниченный». Это позволит серверным процессам беспрепятственно использовать созданную обертку.Если после выполнения всех настроек подключение по-прежнему завершается с ошибкой «Не удалось создать объект...», необходимо проверить права системного пользователя, от имени которого запущена служба сервера 1С.
Выясним, какие системные права требуются для работы COMConnector:
USR1CV8) должен обладать правами чтения и выполнения на каталоги, в которых установлены платформы 1С (как в Program Files, так и в Program Files (x86)).Разработчикам и системным администраторам важно помнить, что фирма «1С» постепенно переводит свои прикладные решения на современные веб-технологии. Технология COM привязана исключительно к операционной системе Windows и не может функционировать на серверах под управлением Linux.
Если вы проектируете новые механизмы интеграции или планируете модернизацию текущих систем, рассмотрите современные альтернативы: