Регистрация COMCNTR.DLL для COM-соединения: RegCOM.cmd на основе RegMSC.cmd в bin 1С 8.3
Приём 1. Зачем нужен COMCNTR.DLL
Регистрация COMCNTR.DLL в bin установленной платформы 1С:Предприятие 8.3 нужна для СОМ-соединения через шаблон RegMSC.cmd и свой RegCOM.cmd. Если в логах мелькает «COMConnector не найден», я не собираю regsvr32 вручную: повторяю логику cmd из bin, подставляю comcntr.dll и запускаю скрипт от администратора после остановки служб, которые держат DLL.
Библиотека comcntr.dll из bin конкретного релиза платформы поднимает СОМ-коннектор с ProgID вроде V83.COMConnector. Через него внешние программы, скрипты и планировщики Windows цепляются к информационной базе по COM, без тонкого клиента и без веб-клиента.
Тонкий клиент живёт своей установкой. СОМ-соединение нужно, когда Excel, PowerShell, отдельная служба или ваш код на языке 1С во внешней обработке создаёт объект COMConnector и зовёт Connect. Пока DLL не прописана в реестре для нужной разрядности, CreateObject или Новый COMObject падают ещё до строки подключения.
Веб-клиент и НТТР-сервисы платформы к comcntr.dll не привязаны. Если задача только открыть базу в браузере, RegCOM.cmd не понадобится, а вот интеграция с Office или службой на Windows без установки толстого клиента упирается в регистрацию именно этой DLL.
Установщик платформы иногда регистрирует comcntr.dll сам, но после копирования bin с другого сервера, смены релиза или ручной «чистки» реестра регистрация слетает. Тогда осмысленный путь - не гадать с параметрами, а скопировать проверенный вызов из RegMSC.cmd и заменить только имя файла.
Приём 2. Остановить ragent и клиентов
Схема 2. Внешний клиент запрашивает COMConnector и получает Connect

Контекст: Приём 2. Остановить ragent и клиентов
Схема 2. Внешний клиент запрашивает COMConnector и получает Connect

Перед правкой реестра Windows не отпустит comcntr.dll, если её уже подхватил агент сервера 1С или rphost. Я останавливаю службу «Агент сервера 1С:Предприятия 8.3» для нужного экземпляра и закрываю сеансы толстого клиента той же версии платформы.
Если регистрация идёт на рабочей станции разработчика, закройте конфигуратор и все окна 1С, где мог остаться СОМ-вызов. Иначе regsvr32 честно пишет, что модуль занят, а вы потратите десять минут на повторные запуски.
После успешной регистрации службу агента можно снова включить. Порядок «остановили - зарегистрировали - запустили» экономит один круг перезагрузки сервера, которую иначе предлагают «на всякий случай». Пока rphost держит comcntr.dll, regsvr32 только имитирует работу и оставляет СОМ-соединение сломанным.
Приём 3. RegMSC.cmd в bin релиза
Схема 1. Перерегистрация comcntr.dll при смене релиза платформы

Контекст: Приём 3. RegMSC.cmd в bin релиза
Схема 1. Перерегистрация comcntr.dll при смене релиза платформы

Откройте каталог установленной платформы: C:\Program Files\1cv8\8.3.xx.xxxx\bin, где xx.xxxx - номер вашего установленного релиза. Для 32-разрядной установки путь часто начинается с Program Files (x86)\1cv8\... - регистрировать нужно DLL из того bin, откуда потом пойдёт вызов COM.
В bin лежит RegMSC.cmd: штатный скрипт регистрации radmin.dll для консоли администрирования серверов. Он уже задаёт рабочий каталог и параметры regsvr32 для библиотек 1С в этой папке. Менять флаги без причины не стоит: задача статьи - подставить comcntr.dll и сохранить остальную строку как в оригинале.
Я обычно делаю копию RegMSC.cmd, а не правлю исходник. Так после эксперимента консоль серверов по-прежнему регистрируется штатным файлом, а COM живёт в отдельном RegCOM.cmd.
Номер в пути 8.3.xx.xxxx сверяю с релизом в ярлыке клиента или в свойствах кластера. На одном сервере часто лежат несколько bin рядом, и comcntr.dll из соседней папки формально регистрируется, но ProgID указывает на другую версию платформы.
Приём 4. RegCOM.cmd из RegMSC.cmd
Откройте копию в блокноте или редакторе, который не ломает кодировку cmd. Найдите radmin.dll и замените на comcntr.dll одним вхождением, без правок пути к regsvr32 и без удаления ключей вроде /n или /i:user, если они есть в вашем RegMSC.cmd.

Контекст: Приём 4. RegCOM.cmd из RegMSC.cmd
Типичная строка после замены выглядит так: regsvr32 /n /i:user comcntr.dll. Имя файла на диске может быть RegCOM.cmd или RegCOMConnector.cmd - главное расширение cmd и сохранение в тот же bin, рядом с comcntr.dll.
Не переносите скрипт в Temp и не подставляйте абсолютный путь к DLL вручную, если оригинал RegMSC.cmd вызывает regsvr32 относительно текущего каталога bin. Так вы повторяете поведение фирменного скрипта и не промахиваетесь версией DLL с соседнего релиза 8.3.
Если в вашем RegMSC.cmd есть переход в каталог скрипта через %~dp0, перенесите эту строку в RegCOM.cmd без изменений. Ниже упрощённый каркас только для ориентира: флаги regsvr32 возьмите из вашего оригинала, а не из примера.
@echo off
cd /d "%~dp0"
regsvr32 /n /i:user comcntr.dll
Кодировка cmd на русской Windows иногда ломает кириллицу в рем-комментариях. Я оставляю в RegCOM.cmd только латиницу и служебные команды, чтобы окно regsvr32 не закрывалось из-за ошибки парсера до вызова DLL.
Приём 5. Запуск с правами администратора
Щёлкните RegCOM.cmd правой кнопкой и выберите «Запуск от имени администратора». UAC без согласия не даст записать класс COM в ветки реестра, и вы увидите «Отказано в доступе» или тихий провал без сообщения об успехе.

Контекст: Приём 5. Запуск с правами администратора
Каталог Program Files защищён: сохранять RegCOM.cmd тоже лучше из сеанса администратора или через редактор, запущенный с повышением. Иначе файл cmd создастся в профиле пользователя, а не в bin.
Нормальный финал - окно regsvr32 с текстом об успешном выполнении DllRegisterServer и DllInstall для comcntr.dll в вашем каталоге bin. Если окно мгновенно исчезло, запустите cmd от администратора, перейдите в bin и вызовите RegCOM.cmd из консоли, чтобы прочитать вывод.
Сообщение в духе успешной регистрации radmin.dll в документации по RegMSC.cmd - тот же класс ответа, только путь в тексте указывает на comcntr.dll. Нет окна и нет строки succeeded - считаю регистрацию незавершённой, даже если cmd вернул управление без паузы.
Приём 6. Проверка COMConnector
Разрядность должна совпадать: 64-битный Excel или PowerShell требуют регистрации из 64-битного bin; 32-битный вызывающий процесс - из Program Files (x86). Смешение даёт «ActiveX component can't create объект» при живой DLL в другой разрядности.
Быстрая проверка из PowerShell от той же разрядности, что и будущий клиент: создание объекта V83.COMConnector и вызов Connect с тестовой строкой соединения. Ошибка «Неверный ProgID» часто значит, что зарегистрировали bin другого релиза, чем указано в строке.
Из внешней обработки на языке 1С я проверяю тот же ProgID, если COM нужен на машине разработчика. Код короткий, зато сразу видно, доходит ли вызов до платформы.
Функция ПроверитьCOMConnector(СтрокаСоединения) Экспорт
Попытка
Коннектор = Новый COMObject("V83.COMConnector");
Исключение
Возврат "COMConnector не создан: " + ОписаниеОшибки();
КонецПопытки;
Попытка
Соединение = Коннектор.Connect(СтрокаСоединения);
Если Соединение = Неопределено Тогда
Возврат "Connect вернул Неопределено";
КонецЕсли;
Возврат "OK: COM-соединение установлено";
Исключение
Возврат "Connect: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
СтрокаСоединения - та же, что для СОМ-соединения в вашей среде: сервер, имя базы, пользователь. Успех - строка OK из функции проверки. «Модуль не найден» при создании COMObject - снова bin, разрядность или незавершённая регистрация.
Если объект создаётся, а Connect ругается на версию, сверьте номер релиза в пути к bin с версией платформы в строке подключения. COM не подменяет несовместимую версию клиента и сервера.
На машине без языка 1С достаточно CreateObject в PowerShell или короткого VBS: Dim c: Set c = CreateObject("V83.COMConnector"). Если шаг падает, проблема ещё в регистрации или разрядности интерпретатора script.exe из SysWOW64.
Я не смешиваю проверку СОМ-соединения с запуском тонкого клиента по ярлыку: клиент может стартовать, а внешний COMConnector останется незарегистрированным для Excel на другой разрядности.
Приём 7. regsvr32 и снятие регистрации
Запасной способ - regsvr32 с полным путём к comcntr.dll из нужного bin, с теми же ключами, что в RegMSC.cmd после замены имени DLL. Риск выше: опечатка в версии каталога 8.3.xx.xxxx регистрирует чужой релиз, и Connect потом ведёт себя непредсказуемо.
При обновлении платформы или конфликте ProgID сначала снимите старую регистрацию: regsvr32 /u comcntr.dll из старого bin, лучше тем же способом от администратора и с остановленным агентом. Затем регистрируйте DLL из bin нового релиза через RegCOM.cmd.
Для сравнения: ручная команда в консоли администратора может выглядеть как переход в bin и вызов regsvr32 /n /i:user comcntr.dll. RegCOM.cmd просто фиксирует эту последовательность в файле, который можно положить в инструкцию для коллег и не переписывать путь каждый раз.
Ошибка «Не найден указанный модуль» при regsvr32 часто означает запуск не из bin или отсутствие comcntr.dll в выбранном релизе. «Доступ запрещён» - UAC или антивирус блокирует запись в реестр. «DllRegisterServer failed» при открытом rphost - вернитесь к приёму 2 и повторите регистрацию.
Когда на одном сервере несколько версий 8.3, я держу отдельный RegCOM.cmd в bin каждого релиза с уникальным именем, например RegCOM_8_3_24_1698.cmd. Так меньше шансов зарегистрировать не ту DLL в спешке.
Для автоматизации на языке 1С иногда нужно собрать строку соединения перед СОМ-вызовом из параметров сеанса. Ниже - фрагмент без привязки к типовой конфигурации: подставьте свои имена сервера и публикации.
Функция СтрокаCOMСоединения(ИмяСервера, ИмяИБНаСервере, Пользователь, Пароль) Экспорт
Шаблон = "Srvr=""%1"";Ref=""%2"";Usr=""%3"";Pwd=""%4""";
Возврат СтрШаблон(Шаблон, ИмяСервера, ИмяИБНаСервере, Пользователь, Пароль);
КонецФункции
Эту строку передают в Connect после успешной регистрации comcntr.dll. Если пароль пустой, ключ Pwd всё равно оформляют по правилам строки соединения вашей документации.
SysWOW64 и System32 здесь не магия: regsvr32 из System32 - 64-битный, из SysWOW64 - 32-битный. Запускайте RegCOM.cmd так, чтобы он использовал тот regsvr32, который соответствует разрядности вызывающего приложения. Скрипт из bin платформы обычно уже попадает в нужный контекст, если вы не смешали установки x86 и x64.
После смены релиза проверьте, не остался ли в автозапуске старый bat с путём к прежнему bin. Одна строка в задаче планировщика может снова зарегистрировать устаревший comcntr.dll и вернуть ошибку ProgID.
Процедура ЗарегистрироватьCOMПослеОбновления(ПутьКBin) Экспорт
// ПутьКBin - каталог bin нового релиза, например из параметра администратора
Скрипт = ПутьКBin + "\RegCOM.cmd";
Если Не Новый Файл(Скрипт).Существует() Тогда
ВызватьИсключение "Нет RegCOM.cmd в " + ПутьКBin;
КонецЕсли;
Команда = "cmd /c """ + Скрипт + """";
// Запуск с повышением прав выполняйте вне 1С: через планировщик или вручную от администратора
Сообщить("Выполните от администратора: " + Команда);
КонецПроцедуры
Код 1С сам не повышает UAC: он напоминает команду, а RegCOM.cmd вы запускаете вручную или через задание с галочкой «Выполнять с наивысшими правами». Так меньше иллюзий, что регистрация прошла из сеанса обычного пользователя конфигуратора.
Снятие регистрации перед обновлением делаю из того же bin, откуда регистрировал: cd в каталог, regsvr32 /u comcntr.dll с теми же ключами, что в RegCOM.cmd, только с /u. Пропуск шага /u оставляет в реестре следы старого ProgID, и Connect может цепляться к DLL не от того релиза.
Ручной regsvr32 с полным путём к comcntr.dll в Program Files удобен для одноразовой проверки. Путь беру в кавычки целиком, иначе пробел после Program обрежет команду. Для постоянной эксплуатации RegCOM.cmd в bin релиза проще передать коллегам и не ошибиться в номере xx.xxxx.
После регистрации я один раз фиксирую в блокноте администратора, какой bin и какая разрядность использовались для V83.COMConnector. Через полгода при следующем обновлении платформы это экономит поиск «почему Excel снова не видит COM».
Приём 8. Что забрать себе
- Скопируйте RegMSC.cmd в RegCOM.cmd в bin нужного релиза 8.3, замените radmin.dll на comcntr.dll и не трогайте остальную логику regsvr32.
- Остановите агент сервера 1С и клиенты, использующие DLL, затем запустите RegCOM.cmd от администратора и дождитесь сообщения об успехе.
- Проверьте V83.COMConnector той же разрядности, что внешний клиент; при смене релиза снимите регистрацию regsvr32 /u из старого bin перед новой регистрацией.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.