Регистрация comcntr.dll, radmin.dll и других библиотек 1С:Предприятия в Windows

· 9 мин

Содержание

Чтобы зарегистрировать DLL для 1С, запустите командную строку от имени администратора и выполните regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll", подставив нужную библиотеку и номер установленной платформы. Разрядность DLL должна совпадать с разрядностью программы, которая её вызывает. Если библиотека 32-битная, а Windows 64-битная, вызывайте regsvr32 из C:\Windows\SysWOW64.

Чаще всего регистрировать приходится две библиотеки платформы. comcntr.dll даёт COM-соединение V83.COMConnector для обменов и внешних обработок. radmin.dll нужна консоли администрирования серверов 1С.

Что проверить перед регистрацией библиотеки 1С

Регистрация записывает в реестр Windows путь к DLL и её идентификатор класса. Ошибка на этом этапе обычно возникает не из-за команды, а из-за окружения. Проверьте четыре вещи.

  • 🖥️ Разрядность платформы. 64-битная платформа ставится в C:\Program Files\1cv8, 32-битная — в C:\Program Files (x86)\1cv8. По папке сразу видно, какая у вас библиотека.
  • 🔢 Версия. В папке 1cv8 может лежать несколько каталогов вида 8.3.24.1548. Регистрировать нужно DLL той версии, которая совпадает с сервером 1С или с клиентом, через который вы подключаетесь.
  • 🔐 Права. Нужна учётная запись с правами локального администратора, а командная строка должна быть запущена с повышением прав. Просто войти под администратором мало.
  • 📦 Наличие файла. Если при установке платформы не отметили нужные компоненты, файла может не быть в bin. Тогда повторите установку и добавьте компонент через «Изменить» в списке программ Windows.

Какая программа будет вызывать DLL

Это главный вопрос, который решает почти все проблемы с разрядностью. Библиотеки 1С работают как внутрипроцессный COM-сервер: DLL загружается прямо в процесс, который её вызвал.

Кто вызываетРазрядность процессаКакую comcntr.dll регистрировать
Клиент 1С 64 бит64из Program Files\1cv8
Клиент 1С 32 бит32из Program Files (x86)\1cv8
Сервер 1С 64 бит (обмен на сервере)64из Program Files\1cv8
Excel или скрипт 32 бит32из Program Files (x86)\1cv8
PowerShell по умолчанию на 64-битной Windows64из Program Files\1cv8

Если неясно, в каком процессе выполняется код, откройте «Диспетчер задач» → вкладку «Подробности» и добавьте столбец «Платформа». Там видно, 32- или 64-битный процесс.

Регистрация DLL через командную строку regsvr32

regsvr32 — стандартная утилита Windows. Она вызывает внутри библиотеки функцию DllRegisterServer, и та сама прописывает себя в реестр.

Пошагово для comcntr.dll

  1. Нажмите «Пуск», наберите cmd, щёлкните правой кнопкой по «Командная строка» → «Запуск от имени администратора».
  2. Узнайте точную версию платформы: dir "C:\Program Files\1cv8".
  3. Выполните регистрацию, подставив свою версию:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"
  1. Дождитесь окна «Успешное выполнение DllRegisterServer». Если окно не нужно, добавьте ключ /s.
  2. Проверьте, что класс появился в реестре:
reg query "HKCR\V83.COMConnector\CLSID"

Путь всегда берите в кавычки: в Program Files есть пробел, и без кавычек команда сломается.

Перерегистрация radmin.dll для консоли серверов

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

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

После этого снова откройте консоль через ярлык или файл 1CV8 Servers.msc. Если у вас 32-битная консоль ММС, регистрируйте radmin.dll из Program Files (x86).

Отмена регистрации

Перед регистрацией новой версии старую лучше снять, чтобы в реестре не осталось путаницы:

regsvr32 /u "C:\Program Files\1cv8\8.3.22.2283\bin\comcntr.dll"
КлючЧто делает
без ключарегистрирует и показывает окно с результатом
/sтихий режим, без окон, подходит для скриптов
/uотменяет регистрацию
/iвызывает DllInstall, у библиотек 1С обычно не нужен

Две версии regsvr32 на 64-битной Windows

На 64-битной Windows лежат две утилиты с одним именем, и их названия папок путают даже опытных администраторов.

ФайлРазрядностьДля каких DLL
C:\Windows\System32\regsvr32.exe64 бит64-битные
C:\Windows\SysWOW64\regsvr32.exe32 бит32-битные

Да, System32 здесь — для 64 бит, а SysWOW64 — для 32 бит. Так исторически сложилось в Windows.

Для 32-битной платформы надёжнее вызывать утилиту явно:

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

Как узнать разрядность самой DLL

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

$f = "C:\Temp\library.dll"
$b = [System.IO.File]::ReadAllBytes($f)
$pe = [BitConverter]::ToInt32($b, 0x3C)
switch ([BitConverter]::ToUInt16($b, $pe + 4)) {
    0x8664 { "64 бит" }
    0x014C { "32 бит" }
    default { "другая платформа" }
}

Скрипт читает поле типа процессора в заголовке PE. Значение 0x8664 означает 64-битную библиотеку, 0x014C — 32-битную.

Обе разрядности на одном компьютере

32-битная и 64-битная регистрации хранятся в разных ветках реестра и друг другу не мешают. Если на машине работают и 32-битный Excel, и 64-битный клиент 1С, зарегистрируйте обе comcntr.dll — каждую своей утилитой.

На терминальном сервере регистрация действует для всех пользователей сразу. Новые сеансы увидят изменения, а уже открытые клиенты 1С и Excel могут держать старую библиотеку до перезапуска. Делайте замену в окно обслуживания и предупредите пользователей: им придётся закрыть программы.

Скрипт PowerShell для регистрации DLL 1С на нескольких машинах

Когда платформа обновляется на десятке рабочих мест, вручную вписывать номер версии неудобно. Скрипт сам находит последнюю установленную версию и регистрирует её библиотеку.

# Запускать в PowerShell от имени администратора
$base = "C:\Program Files\1cv8"
$last = Get-ChildItem $base -Directory |
    Where-Object { $_.Name -match '^\d+\.\d+\.\d+\.\d+$' } |
    Sort-Object { [version]$_.Name } |
    Select-Object -Last 1

$dll = Join-Path $last.FullName "bin\comcntr.dll"
if (-not (Test-Path $dll)) { Write-Error "Нет файла $dll"; exit 1 }

$p = Start-Process "$env:windir\System32\regsvr32.exe" `
    -ArgumentList "/s", "`"$dll`"" -Wait -PassThru
if ($p.ExitCode -eq 0) { "Зарегистрировано: $dll" } else { "Ошибка, код $($p.ExitCode)" }

Сортировка через [version] важна. Обычная сортировка строк поставит 8.3.9 после 8.3.24, и скрипт зарегистрирует старую библиотеку.

Для 32-битной платформы замените $base на C:\Program Files (x86)\1cv8, а путь к утилите — на $env:windir\SysWOW64\regsvr32.exe.

Тот же приём в bat-файле

Если PowerShell запрещён политикой, подойдёт простой bat для групповой политики или ручного запуска:

@echo off
set VER=8.3.24.1548
regsvr32 /s "C:\Program Files\1cv8\%VER%\bin\comcntr.dll"
if %errorlevel% neq 0 echo Ошибка регистрации, код %errorlevel%

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

После регистрации проверьте
Выполнено: 0 / 4

Путь к зарегистрированной библиотеке смотрят так: возьмите значение CLSID из первой команды и откройте ветку HKCR\CLSID\{ваш CLSID}\InprocServer32. Для 32-битной регистрации на 64-битной системе ищите ту же ветку в HKCR\WOW6432Node\CLSID.

Ошибки при регистрации DLL и как их устранить

regsvr32 показывает код ошибки в шестнадцатеричном виде. По нему причина находится быстрее, чем по тексту.

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

Почему после обновления платформы всё ломается снова

Установщик новой версии платформы регистрирует свои библиотеки, но не всегда. А удаление старой версии может оставить в реестре ссылку на исчезнувший файл. Отсюда типичный сценарий: обмен работал год, после обновления сервера 1С упал с ошибкой COM-соединения.

Правило простое: после каждого обновления сервера 1С перерегистрируйте comcntr.dll той же версии на всех машинах, откуда идёт COM-подключение. Скрипт из предыдущего раздела удобно положить в регламент обновления.

Если ошибки нет, а подключение не работает

  • 🧩 В реестре зарегистрирована правильная версия, но процесс запущен до регистрации. Перезапустите программу или службу, которая вызывает COM.
  • 🌐 Подключение идёт к серверу 1С, а между клиентом и сервером закрыты порты 1540, 1541 и диапазон портов рабочих процессов. Регистрация DLL тут ни при чём, проверьте сетевой доступ.
  • 👤 Код выполняется на сервере 1С, а DLL зарегистрирована только на рабочем месте пользователя. Регистрировать нужно там, где выполняется код.

COM+, внешние компоненты и другие способы подключить библиотеку

Не каждую библиотеку для 1С надо прогонять через regsvr32. Выбор зависит от её типа и задачи.

СпособКогда подходитРиски и ограничения
regsvr32COM-библиотеки: comcntr.dll, radmin.dll, старые компоненты COMнужны права администратора, разрядность должна совпадать
Приложение COM+надо вызвать 64-битную DLL из 32-битного процесса или наоборотлишняя настройка, учётная запись приложения требует прав
Внешняя компонента Native APIдрайверы оборудования, библиотеки из макета или ZIP-архиварегистрация в Windows не нужна, нужен архив с манифестом
regasm /codebaseсборки .NET с COM-интерфейсомнужна правильная версия .NET Framework и разрядность regasm

Приложение COM+ для обхода разрядности

COM+ запускает библиотеку в отдельном процессе dllhost.exe. Тогда разрядность вызывающей программы перестаёт иметь значение. Так решают задачу «32-битный Excel должен работать с 64-битным COMConnector».

  1. Зарегистрируйте comcntr.dll обычным способом.
  2. Нажмите Win+R, выполните dcomcnfg.
  3. Откройте «Службы компонентов» → «Компьютеры» → «Мой компьютер» → «Приложения COM+».
  4. Создайте новое пустое приложение, тип — серверное приложение.
  5. На шаге удостоверения выберите учётную запись, от которой будет работать библиотека. Для сервиса укажите отдельного пользователя с паролем, а не того, кто сейчас вошёл.
  6. В созданном приложении откройте «Компоненты» → «Создать» → «Установить новые компоненты» и укажите файл comcntr.dll.

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

Внешние компоненты без регистрации в Windows

Современные компоненты для 1С (Native API) не регистрируются через regsvr32 вообще. Их хранят в общем макете конфигурации или в ZIP-архиве с файлом MANIFEST.XML, а подключают методом ПодключитьВнешнююКомпоненту. Права администратора Windows для этого не нужны.

Попытка прогнать такую DLL через regsvr32 даёт ошибку про отсутствие точки входа DllRegisterServer. Это нормально: библиотека устроена иначе.

Пример проверки COM-соединения из 1С после регистрации:

Попытка
    Коннектор = Новый COMОбъект("V83.COMConnector");
    Сообщить("COMConnector зарегистрирован");
Исключение
    Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;

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

Частые вопросы о регистрации DLL в 1С

Нужно ли регистрировать comcntr.dll на каждом компьютере?
Да, на каждом, где выполняется код с Новый COMОбъект("V83.COMConnector"). Если обмен выполняется на сервере 1С, достаточно сервера.
Можно ли зарегистрировать две версии comcntr.dll одновременно?
Одной разрядности — нет: в реестре хранится один путь для класса, и действует последняя регистрация. Разные разрядности уживаются.
Как узнать, какая версия comcntr.dll сейчас зарегистрирована?
Откройте в реестре HKCR\CLSID\{CLSID класса}\InprocServer32. В значении по умолчанию — полный путь, по каталогу видна версия.
Нужна ли перезагрузка после регистрации DLL?
Перезагрузка Windows не нужна. Перезапустите только программы и службы, которые обращаются к библиотеке.
Что делать, если регистрацию запрещает администратор домена?
Попросите добавить команду регистрации в скрипт автозагрузки компьютера через групповую политику. Он выполняется с системными правами.