Как зарегистрировать COM-коннектор 1С на 64-битном сервере и не перепутать разрядность

· 9 мин

Содержание

Чтобы зарегистрировать comcntr.dll на 64-битном сервере 1С, откройте командную строку от имени администратора и выполните regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll". Файл берите из каталога той версии платформы, на которой работает кластер, и той же разрядности, что и процесс, который будет создавать COM-объект. Для 64-битного сервера 1С это 64-битная библиотека из Program Files, для 32-битного клиента или 32-битного приложения — библиотека из Program Files (x86).

Способов регистрации по сути два: вручную через regsvr32 или bat-файлом, который подставляет нужную версию сам. Первый подходит для разовой настройки, второй — когда платформу обновляют регулярно и регистрацию нужно повторять после каждого обновления. Ошибаются почти всегда в одном и том же месте: регистрируют библиотеку не той разрядности или не той версии.

Зачем нужна регистрация и как найти comcntr.dll

comcntr.dll — это внешнее COM-соединение 1С:Предприятия. Через него одна база подключается к другой (Новый COMОбъект("V83.COMConnector")), через него работают обработки обмена, загрузка из других баз, внешние скрипты на PowerShell, VBScript, Python, а также сторонние программы, которые читают данные 1С.

Регистрация записывает в реестр Windows имя класса V83.COMConnector и путь к конкретной библиотеке. Пока записи нет или она указывает на удалённую версию, любой вызов заканчивается ошибкой.

Признаки, что дело в регистрации:

  • 🔴 при создании объекта 1С пишет Недопустимая строка с указанием класса (код 0x800401F3);
  • 🔴 появляется Класс не зарегистрирован (код 0x80040154);
  • 🔴 обмен работал, но сломался сразу после обновления платформы;
  • 🔴 скрипт подключается с рабочей станции, но не с сервера, или наоборот.

Где лежит библиотека

Каждая установленная версия платформы держит свою копию в каталоге bin:

Разрядность платформыТипичный путь
64-битC:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll
32-битC:\Program Files (x86)\1cv8\8.3.xx.xxxx\bin\comcntr.dll

Быстро найти все копии на сервере можно одной командой:

dir "C:\Program Files\1cv8\comcntr.dll" "C:\Program Files (x86)\1cv8\comcntr.dll" /s /b

Если в выдаче несколько версий, нужна та, что совпадает с версией кластера. Версию кластера видно в консоли администрирования серверов или в имени каталога, из которого запущена служба агента (ragent.exe).

Версия COM-коннектора должна совпадать с версией платформы сервера до последней цифры. Коннектор 8.3.23 к кластеру 8.3.24 не подключится, даже если зарегистрирован правильно.

Что подготовить перед регистрацией

Сама команда занимает секунду. Время уходит на то, чтобы выяснить, кто именно будет вызывать COM-объект.

Определите, какой процесс создаёт объект

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

Разрядность процесса проще всего проверить в диспетчере задач: на вкладке «Подробности» можно включить колонку «Платформа» — там будет «32 бита» или «64 бита».

Права и окружение

  • 👤 учётная запись с правами локального администратора на сервере;
  • 🖥️ командная строка или PowerShell, запущенные через «Запуск от имени администратора»;
  • 📁 установленная платформа нужной версии и разрядности (если 32-битной платформы на сервере нет, поставьте её — хватит компонента клиента);
  • 🔒 сведения о том, под какой учётной записью работает служба сервера 1С (по умолчанию USR1CV8): серверный код создаёт COM-объект именно от её имени.

Если на сервере стоит антивирус или политика AppLocker с ограничением запуска, regsvr32 может молча не отработать. Проверьте журнал защиты, если регистрация «прошла», а запись в реестре не появилась.

Пользователь базы для подключения

COM-соединение входит в базу как обычный пользователь, поэтому заведите для него отдельную учётную запись, например «Обмен». Дайте ей только те роли, которые нужны обмену или выгрузке, и не используйте для этого администратора.

Пароль в строке соединения хранится открытым текстом. Если строка лежит в константе, регламентном задании или скрипте на диске, ограничьте доступ к ним. Аутентификация операционной системы через COM-соединение тоже возможна, но тогда пользователь 1С должен быть привязан к учётной записи Windows, под которой работает вызывающий процесс.

Регистрация comcntr.dll через regsvr32 пошагово

Ручная регистрация

  1. Нажмите Win, наберите cmd, щёлкните правой кнопкой по «Командная строка» → «Запуск от имени администратора».
  2. Выполните команду с полным путём в кавычках (в пути есть пробелы):
regsvr32 "C:\Program Files\1cv8\8.3.24.1691\bin\comcntr.dll"
  1. Дождитесь окна «Успешное выполнение DllRegisterServer в …». Это и есть подтверждение.
  2. Если регистрация нужна и для 32-битных программ, повторите команду для библиотеки из Program Files (x86) через 32-битный regsvr32 (о нём в следующем разделе).

Номер версии в пути замените на свой. Для скриптов полезен ключ /s — он убирает окно с сообщением, а результат смотрят по коду возврата.

Регистрация bat-файлом после каждого обновления

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

@echo off
rem Версию платформы задаём один раз
set VER=8.3.24.1691

"%SystemRoot%\System32\regsvr32.exe" /s "C:\Program Files\1cv8\%VER%\bin\comcntr.dll"
echo 64-bit: код %errorlevel%

if exist "C:\Program Files (x86)\1cv8\%VER%\bin\comcntr.dll" (
  "%SystemRoot%\SysWOW64\regsvr32.exe" /s "C:\Program Files (x86)\1cv8\%VER%\bin\comcntr.dll"
  echo 32-bit: код %errorlevel%
)
pause

Запускайте его тоже от имени администратора. Код 0 означает успех, любой другой — смотрите таблицу ошибок ниже.

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

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

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

Имя класса V83.COMConnector одно на все версии 8.3. Последняя успешная регистрация перезаписывает предыдущую, поэтому отдельная отмена перед новой регистрацией обычно не требуется.

Разрядность на x64: System32 и SysWOW64

Здесь путаница возникает у всех. На 64-битной Windows названия папок работают наоборот:

ФайлРазрядностьДля какой библиотеки
C:\Windows\System32\regsvr32.exe64 битаcomcntr.dll из Program Files
C:\Windows\SysWOW64\regsvr32.exe32 битаcomcntr.dll из Program Files (x86)

64-битная и 32-битная регистрации живут в разных ветках реестра и друг другу не мешают. Поэтому на одном сервере спокойно можно держать обе: 64-битный коннектор для rphost.exe и 32-битный для старого Excel или 32-битной утилиты обмена.

Что из этого следует на практике:

  • ✅ чтобы серверный код 1С увидел COM-коннектор, нужна 64-битная регистрация;
  • ✅ 32-битная регистрация на 64-битном сервере ничего не даёт rphost.exe, даже если regsvr32 сообщил об успехе;
  • ✅ если вызов идёт из клиентского кода 32-битного клиента — нужна 32-битная регистрация на компьютере пользователя, а не на сервере;
  • ✅ 32-битный процесс не может загрузить 64-битную DLL и наоборот — это ограничение Windows, настройками его не обойти.

Если запускать regsvr32 через «Выполнить» или из обычной командной строки, Windows возьмёт 64-битную версию из System32. Явный полный путь к нужному regsvr32.exe снимает любые сомнения.

Ошибки при регистрации comcntr.dll и как их исправить

Коды ниже показывает сам regsvr32 в окне с ошибкой.

КодТекстПричинаЧто сделать
0x80070005Отказано в доступекомандная строка без прав администраторазапустить cmd через «Запуск от имени администратора»
0x8007007eНе найден указанный модульопечатка в пути, нет кавычек или в каталоге bin не хватает зависимых библиотекпроверить путь через dir, при повреждении — восстановить платформу через установщик
0x800700c1Не является приложением Win32разрядность библиотеки и regsvr32 не совпадаетвзять regsvr32 из нужной папки (таблица выше)
0x80004005Неопознанная ошибкачаще всего блокировка антивирусом или политикойпроверить журнал защиты, добавить каталог платформы в исключения

Отдельно — ошибки, которые всплывают уже в 1С, когда регистрация прошла, но работает не так:

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

Когда помогает COM+ приложение

Если COM-соединение вызывают из веб-сервиса на IIS или из службы, которая работает под ограниченной учётной записью, иногда прав этой учётки не хватает. Классический обходной путь — создать в оснастке dcomcnfg («Службы компонентов») пустое серверное COM+ приложение, добавить в него comcntr.dll как компонент и на вкладке «Удостоверение» указать учётную запись, от которой коннектор будет запускаться.

Минус способа: после обновления платформы компонент в COM+ придётся пересоздать, потому что он привязан к пути старой версии. Прибегайте к нему, только когда обычная регистрация и права не помогли.

Проверка, что COM-соединение работает

Сообщение regsvr32 об успехе говорит только о записи в реестр. Убедиться, что подключение реально проходит, нужно отдельно.

Через реестр

Сначала узнайте идентификатор класса:

reg query "HKCR\V83.COMConnector\CLSID"

Затем подставьте полученный GUID и посмотрите, на какую библиотеку он указывает в 64-битной и 32-битной ветках:

reg query "HKCR\CLSID\{GUID}\InprocServer32"
reg query "HKCR\CLSID\{GUID}\InprocServer32" /reg:32

В значении по умолчанию должен стоять путь к каталогу текущей версии платформы. Если там старая версия или запись не находится — регистрацию надо повторить.

Через PowerShell

64-битная проверка — в обычном PowerShell, запущенном на сервере:

$c = New-Object -ComObject V83.COMConnector
$base = $c.Connect('Srvr="srv1c";Ref="buh";Usr="Обмен";Pwd="пароль"')
$base.Метаданные.Имя

Для 32-битной проверки запустите C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe и выполните те же строки. Имя сервера, базы и пользователя замените на свои.

Если New-Object падает — проблема в регистрации. Если объект создаётся, а падает Connect — регистрация в порядке, искать нужно в строке соединения, версии платформы или правах пользователя базы.

Из самой 1С

Финальная проверка — та, что повторяет боевой сценарий. Выполните в серверной процедуре (например, во внешней обработке с вызовом на сервере):

Коннектор = Новый COMОбъект("V83.COMConnector");
База = Коннектор.Connect("Srvr=""srv1c"";Ref=""buh"";Usr=""Обмен"";Pwd=""пароль""");
Сообщить(База.Метаданные.Имя);

Так вызов пройдёт ровно через тот rphost.exe и ту учётную запись, что и обмен или регламентное задание.

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

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

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