comcntr.dll, radmin.dll и COM-компоненты: регистрация библиотек платформы 1С 8.3 в Windows

· 9 мин

Содержание

Зарегистрировать DLL для 1С 8.3 можно одной командой: откройте командную строку от имени администратора и выполните regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll". Главное условие — разрядность библиотеки должна совпадать с разрядностью программы, которая будет её вызывать, а версия — с версией платформы, к базам которой вы подключаетесь.

Типичная ситуация: после обновления платформы перестала работать обработка обмена через COM-соединение или консоль кластера пишет «Класс не зарегистрирован». Первое, что стоит проверить, — регистрацию библиотеки: её могли не сделать, сделать не той разрядности, или она указывает на удалённую папку старого релиза.

Какие библиотеки 1С регистрируют и что проверить заранее

В каталоге bin платформы десятки DLL, но вручную регистрируют только две. Остальные загружаются самой платформой и в реестре не нуждаются.

БиблиотекаЗачем нужнаЧто перестаёт работать без регистрации
comcntr.dllCOM-соединение с базой, объект V83.COMConnectorобмены и обработки через COM, подключение из Excel, скриптов, внешних программ
radmin.dllоснастка «Администрирование серверов 1С:Предприятия» для MMCконсоль кластера: ошибка при открытии или пустой список

Отдельно стоит OLE-сервер V83.Application — его регистрирует сам исполняемый файл, а не regsvr32 (об этом ниже).

Проверка разрядности

Перед регистрацией выясните три вещи:

  • 🖥️ Разрядность Windows. Win + Pause или Параметры → Система → О программе — строка «Тип системы».
  • 📦 Какая платформа установлена. 64-битная лежит в C:\Program Files\1cv8\, 32-битная — в C:\Program Files (x86)\1cv8\. На одном компьютере могут стоять обе.
  • 🔌 Кто будет вызывать DLL. 32-битный Excel или 32-битный клиент 1С работают только с 32-битной comcntr.dll. 64-битный сервер 1С — только с 64-битной.

Разрядность Office проверяется в Файл → Учётная запись → О программе Excel: в первой строке окна указано «32-разрядная» или «64-разрядная».

Точная версия платформы

Номер релиза — это имя папки внутри 1cv8, например 8.3.24.1548. В клиенте его видно в окне «О программе». Для серверных баз версия comcntr.dll должна совпадать с версией кластера до последней цифры, иначе соединение не установится даже при правильной регистрации.

Регистрация через regsvr32: команды для comcntr.dll и radmin.dll

Шаг за шагом

  1. Нажмите Пуск, наберите cmd, щёлкните правой кнопкой по «Командная строка» → «Запуск от имени администратора». Без повышенных прав запись в реестр не пройдёт.
  2. Найдите папку нужного релиза: C:\Program Files\1cv8\ и далее папку с номером версии, внутри — bin.
  3. Выполните команду регистрации. Путь берите в кавычки — в нём есть пробелы.
  4. Дождитесь окна «Успешное выполнение DllRegisterServer».

Команды для 64-битной платформы (номер версии подставьте свой):

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Для 32-битной платформы на 64-битной Windows:

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

Полезные ключи regsvr32

  • /u — отменить регистрацию;
  • /s — тихий режим без окон, удобно в скриптах и групповых политиках.

Когда платформу обновили, а старый релиз удалили, сначала снимите регистрацию со старой библиотеки (если папка ещё на месте), потом зарегистрируйте новую:

regsvr32 /u "C:\Program Files\1cv8\8.3.23.1997\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"

Регистрация хранится в реестре в виде полного пути к файлу. Если удалить папку релиза, запись останется и будет указывать в пустоту. Поэтому после каждого обновления платформы на машине, где работают COM-обмены, перерегистрируйте comcntr.dll из новой папки.

Две папки System32: регистрация DLL в 64-битной Windows

Здесь путаются чаще всего. В 64-битной Windows два файла regsvr32, и названия папок обманчивы:

ПутьРазрядностьЧто регистрирует
C:\Windows\System32\regsvr32.exe64 бита64-битные DLL из Program Files
C:\Windows\SysWOW64\regsvr32.exe32 бита32-битные DLL из Program Files (x86)

Обычная команда regsvr32 без пути запускает 64-битную версию из System32. Windows умеет передать 32-битную библиотеку нужному regsvr32 сама, но при сбоях указывайте полный путь явно — так сразу видно, в какую ветку реестра идёт запись.

32-битные COM-классы записываются в отдельный раздел реестра WOW6432Node. Поэтому 64-битная программа «не видит» 32-битную регистрацию, и наоборот. Отсюда главное правило:

Регистрировать нужно библиотеку той же разрядности, что и вызывающая программа, а не той, что у Windows.

Пара частых сочетаний:

  • 📊 64-битная Windows, 32-битный Excel, макрос подключается к базе → нужна 32-битная платформа и comcntr.dll из Program Files (x86).
  • 🛠️ 64-битная Windows, установлена только 32-битная платформа, консоль кластера не открывается → оснастку запускают в 32-битной MMC командой mmc /32, затем добавляют оснастку через Файл → Добавить или удалить оснастку.

Если нужны обе разрядности (например, на терминальном сервере работают и 32-битный Excel, и 64-битные скрипты), установите обе платформы одной версии и зарегистрируйте каждую comcntr.dll своим regsvr32. Друг другу они не мешают.

Регистрация DLL в файловом режиме и на сервере 1С

Файловая база

В файловом варианте COM-соединение создаёт тот процесс, который выполняет код. Значит, comcntr.dll регистрируют на том компьютере, где запущен клиент или скрипт, а не там, где лежит папка базы.

Строка подключения для файловой базы:

Коннектор = Новый COMОбъект("V83.COMConnector");
Соединение = Коннектор.Connect("File=""D:\Bases\Buh"";Usr=""Администратор"";Pwd=""""");

Если в базу пустили пользователей по сети, библиотеку придётся зарегистрировать на каждом рабочем месте, откуда запускают обмен.

Клиент-серверная база

Когда COM-объект создаётся в серверной процедуре (&НаСервере, регламентное задание, фоновое задание), библиотеку загружает рабочий процесс rphost. Тогда:

  1. Регистрируйте comcntr.dll на компьютере с сервером 1С, а не на рабочих станциях.
  2. Берите DLL той же разрядности, что и сервер. Сервер 64-битный — значит, 64-битная библиотека из C:\Program Files\1cv8\<версия>\bin.
  3. Версия библиотеки — та же, что у кластера, к которому идёт подключение.

Строка подключения к серверной базе:

Соединение = Коннектор.Connect("Srvr=""srv1c"";Ref=""buh"";Usr=""Обмен"";Pwd=""пароль""");

radmin.dll нужна там, где открывают консоль администрирования. Это может быть сам сервер или компьютер администратора — консоль подключается к агенту сервера по сети, порт по умолчанию 1540.

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

Права службы сервера

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

Ошибки регистрации и подключения: разбор кодов

Сначала соберите факты: точный текст ошибки, кто её выдаёт (regsvr32 или 1С), разрядность вызывающей программы.

Диагностика: выберите симптом

Как проверить, какая библиотека зарегистрирована сейчас

Регистрация видна в реестре. Сначала узнайте идентификатор класса:

reg query "HKCR\V83.COMConnector\CLSID"

Команда вернёт GUID в фигурных скобках. По нему найдите путь к файлу:

reg query "HKCR\CLSID\{GUID-из-предыдущей-команды}\InProcServer32"
reg query "HKCR\WOW6432Node\CLSID\{GUID-из-предыдущей-команды}\InProcServer32"

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

Быстрый тест без 1С

PowerShell создаёт COM-объект в своей разрядности. Это удобный способ проверить регистрацию:

$c = New-Object -ComObject V83.COMConnector
$c.GetType()

Для 64-битной проверки запускайте обычный PowerShell. Для 32-битной — C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe. Если объект создаётся без ошибки, библиотека этой разрядности зарегистрирована.

Если регистрация прошла, а ошибка осталась

Проверьте по порядку:

  1. Тот ли процесс. Код с COM-соединением может выполняться на сервере, хотя кнопку нажимают на клиенте. Посмотрите, в какой процедуре создаётся Новый COMОбъект: с директивой &НаСервере библиотека нужна на сервере 1С.
  2. Тот ли компьютер. На терминальном сервере и на рабочей станции регистрация своя. Регистрировать DLL «у себя», когда обмен запускают на сервере, бесполезно.
  3. Перезапуск вызывающей программы. Excel, MMC или клиент 1С, запущенные до регистрации, иногда продолжают работать со старыми данными. Закройте их полностью и откройте снова.
  4. Антивирус. Некоторые антивирусы блокируют запись COM-классов в реестр. Если regsvr32 сообщает об успехе, а запись в реестре не появляется, загляните в журнал антивируса.

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

Без regsvr32: другие способы и управление из 1С

Регистрация OLE-сервера 1С

Объект V83.Application (запуск 1С как OLE-сервера из внешних программ) регистрируется ключом исполняемого файла, а не через DLL:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" /regserver

Снять регистрацию — ключ /unregserver. Командную строку также запускайте от имени администратора.

Установщик платформы

При установке и изменении состава платформы отметьте компонент «Администрирование сервера 1С:Предприятия», если на этом компьютере нужна консоль кластера. Когда возникает вопрос, установлен ли компонент, удобнее запустить установщик того же релиза повторно, выбрать режим изменения и проверить список компонентов, чем регистрировать radmin.dll вслепую.

Внешние компоненты из кода 1С

Внешние компоненты подключаются методами ПодключитьВнешнююКомпоненту и УстановитьВнешнююКомпоненту. Технология Native API работает без регистрации в реестре — платформа загружает такую DLL сама, обычно из макета конфигурации или ZIP-архива. regsvr32 к ним применять не нужно.

Старые компоненты по технологии COM (их до сих пор встречают среди драйверов торгового оборудования) регистрировать нужно. Обычно это делает установщик драйвера от производителя. Если драйвер ставили копированием файлов, зарегистрируйте его DLL так же, через regsvr32 нужной разрядности.

Скрипт для группы компьютеров

Если обмены работают на нескольких рабочих станциях, после обновления платформы удобно запускать bat-файл через групповые политики или вручную:

@echo off
set VER=8.3.24.1548
set BIN=C:\Program Files\1cv8\%VER%\bin
if not exist "%BIN%\comcntr.dll" (
  echo Не найден релиз %VER%
  exit /b 1
)
regsvr32 /s "%BIN%\comcntr.dll"
echo comcntr.dll %VER% зарегистрирована

Ключ /s убирает окна, а проверка if not exist не даст тихо зарегистрировать несуществующий путь. Для 32-битной платформы замените папку на Program Files (x86) и вызывайте C:\Windows\SysWOW64\regsvr32.exe.

После обновления платформы на машине с COM-обменами
Выполнено: 0 / 6

Частые вопросы

Нужно ли перерегистрировать comcntr.dll после каждого обновления платформы?
Да, если по COM подключаются к серверной базе: версия библиотеки должна совпадать с версией кластера. Для файловых баз перерегистрация нужна, когда старую папку релиза удаляют.
Можно ли зарегистрировать comcntr.dll без прав администратора?
Нет. Регистрация пишет данные в общий раздел реестра, обычному пользователю это запрещено. Попросите администратора или используйте групповые политики.
Почему из Excel COM-соединение не работает, а из 1С работает?
Скорее всего, Excel 32-битный, а зарегистрирована только 64-битная библиотека. Установите 32-битную платформу того же релиза и зарегистрируйте её comcntr.dll.
Сколько версий comcntr.dll может быть зарегистрировано одновременно?
Одна 32-битная и одна 64-битная: имя класса V83.COMConnector одно, действует последняя регистрация в каждой разрядности.
Зачем регистрировать radmin.dll, если сервер работает?
Сервер работает и без неё. radmin.dll нужна только консоли администрирования, чтобы открыть кластер, увидеть сеансы и базы.