Как зарегистрировать COM-коннектор 1С на 64-битном сервере и не перепутать разрядность
Содержание
Чтобы зарегистрировать 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, запущенный обычным способом на x64 | 64 | из 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 пошагово
Ручная регистрация
- Нажмите
Win, наберитеcmd, щёлкните правой кнопкой по «Командная строка» → «Запуск от имени администратора». - Выполните команду с полным путём в кавычках (в пути есть пробелы):
regsvr32 "C:\Program Files\1cv8\8.3.24.1691\bin\comcntr.dll"
- Дождитесь окна «Успешное выполнение DllRegisterServer в …». Это и есть подтверждение.
- Если регистрация нужна и для 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.exe | 64 бита | comcntr.dll из Program Files |
C:\Windows\SysWOW64\regsvr32.exe | 32 бита | 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 и ту учётную запись, что и обмен или регламентное задание.
Частые вопросы
Нужно ли перезагружать сервер после регистрации comcntr.dll?
rphost.exe мог загрузить старую библиотеку — если ошибка остаётся, перезапустите службу сервера 1С в нерабочее время: при этом оборвутся сеансы всех пользователей.Можно ли держать зарегистрированными две версии 8.3 одновременно?
V83.COMConnector одно, и действует последняя регистрация. Одновременно могут жить только 64-битная и 32-битная регистрации.