comcntr.dll не работает: регистрация, разрядность и права DCOM

· 10 мин

Содержание

COM Connector 1С 8.3 регистрируют одной командой из командной строки, запущенной от имени администратора: regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll". Вместо 8.3.xx.xxxx подставьте номер платформы, которой вы подключаетесь к базе. После этого объект V83.COMConnector становится доступен внешним программам и другим базам 1С.

Простой regsvr32 закрывает большинство случаев. Если подключение идёт из 32-битной программы на 64-битной Windows — нужен regsvr32 из папки SysWOW64 и библиотека из 32-битной платформы. Если COM-соединение вызывает служба, веб-сервер или пользователь без прав администратора — компоненту оформляют как приложение COM+ и настраивают права в консоли DCOMCNFG.

Что проверить до регистрации comcntr.dll

COM Connector — это библиотека comcntr.dll из каталога bin платформы. Через неё внешняя программа (Excel, скрипт, сайт, другая база 1С) открывает «внешнее соединение» с информационной базой и работает с ней как с объектом.

Перед регистрацией проверьте четыре вещи:

  • 📁 Файл на месте. Откройте C:\Program Files\1cv8\<версия>\bin\ (64-битная платформа) или C:\Program Files (x86)\1cv8\<версия>\bin\ (32-битная) и найдите comcntr.dll. Нет файла — переустановите платформу с нужными компонентами.
  • 🔢 Версия совпадает с сервером. Для клиент-серверной базы версия comcntr.dll должна совпадать с версией сервера 1С до последней цифры. Подключение через библиотеку 8.3.24 к серверу 8.3.25 не установится.
  • 🧩 Разрядность совпадает с вызывающей программой. 32-битный Excel загрузит только 32-битный comcntr.dll, 64-битный PowerShell — только 64-битный. Это главный источник ошибок, ему посвящён отдельный раздел.
  • 🔑 Права администратора. Регистрация пишет в ветку реестра HKEY_CLASSES_ROOT. Без повышенных прав regsvr32 вернёт отказ в доступе.

Если на компьютере установлено несколько версий платформы, COM Connector зарегистрирован только для одной из них — последней, на которой выполнили регистрацию. Две версии V83.COMConnector одновременно в системе не живут.

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

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

Основной способ — regsvr32. Порядок действий:

  1. Нажмите Win, наберите cmd, на найденной «Командной строке» щёлкните правой кнопкой и выберите Запуск от имени администратора.
  2. Подтвердите запрос UAC.
  3. Выполните команду, подставив свою версию:
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll"
  1. Дождитесь окна «Успешное выполнение DllRegisterServer в …comcntr.dll».

Путь берите в кавычки — в нём есть пробел. Без кавычек regsvr32 попытается открыть C:\Program и выдаст ошибку загрузки модуля.

Чтобы отменить регистрацию (например, перед переходом на другую версию), добавьте ключ /u:

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

Ключ /s подавляет окно с результатом — пригодится в скриптах.

Регистрация через RunAs

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

runas /user:Администратор "regsvr32 \"C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll\""

Для доменной учётной записи укажите домен: /user:CORP\admin1c. Система спросит пароль.

При включённом UAC runas запускает процесс с ограниченным маркером, даже если пользователь входит в группу «Администраторы». Регистрация тогда падает с кодом 0x80070005. Надёжнее открыть командную строку через Запуск от имени администратора или войти под встроенной учётной записью администратора.

Для автоматического выполнения от имени администратора без запроса UAC используют планировщик заданий с флажком «Выполнить с наивысшими правами» или групповые политики — об этом ниже.

comcntr.dll в 64-битной Windows: какую библиотеку и каким regsvr32

На 64-битной Windows есть два regsvr32 и две ветки реестра. Путаница между ними — причина ошибки Недопустимая строка с указанием класса при совершенно «зарегистрированной» компоненте.

Кто вызывает COM ConnectorКакая платформа нужнаКакой regsvr32 запускать
64-битный процесс: PowerShell, 64-битный Excel, 64-битный сервер 1С64-битная, Program Files\1cv8C:\Windows\System32\regsvr32.exe
32-битный процесс: 32-битный Excel/Access, 32-битный клиент 1С, старые программы32-битная, Program Files (x86)\1cv8C:\Windows\SysWOW64\regsvr32.exe
Обе разрядности на одном компьютереОбе платформы одной версииОба, каждый со своей библиотекой

Имена папок выглядят перевёрнутыми, но это так: System32 хранит 64-битные программы, а SysWOW64 — 32-битные.

Регистрация 32-битной библиотеки:

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

Как узнать разрядность программы, которая будет вызывать коннектор:

  • 🖥️ Excel: Файл → Учетная запись → О программе Excel — в первой строке окна указано «32-разрядная» или «64-разрядная».
  • ⚙️ Любой процесс: в «Диспетчере задач» на вкладке «Подробности» добавьте столбец «Платформа».
  • 📜 Скрипт VBS: запускается тем cscript.exe, из какой папки его вызвали. C:\Windows\SysWOW64\cscript.exe — 32 бита, C:\Windows\System32\cscript.exe — 64.

Если 64-битной программе нужен 32-битный коннектор (или наоборот), регистрация в «чужом» regsvr32 не поможет. Решение — приложение COM+ из следующего раздела: компонента работает в отдельном процессе dllhost.exe нужной разрядности, и разрядность вызывающей программы перестаёт иметь значение.

Настройка прав в DCOMCNFG и приложение COM+

Обычная регистрация через regsvr32 делает компоненту внутрипроцессной: она загружается в процесс вызывающей программы и работает с её правами. Это не подходит, когда коннектор вызывает служба (IIS, планировщик, сервис интеграции) под учётной записью с урезанными правами.

Приложение COM+ решает обе задачи: задаёт учётную запись, от которой работает соединение, и снимает проблему разрядности.

Создание приложения COM+

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

Добавление comcntr.dll в приложение

  1. Разверните созданное приложение, щёлкните правой кнопкой по Компоненты → Создать → Компонент.
  2. Выберите «Установка новых компонентов» и укажите comcntr.dll нужной версии и разрядности.
  3. Завершите мастер. В списке появится V83.COMConnector.

Если компонента уже была зарегистрирована через regsvr32, мастер может предложить «Импорт уже зарегистрированных компонентов» — это тоже рабочий путь, но тогда проверьте, что импортирована библиотека нужной версии.

Права доступа

Откройте свойства приложения COM+ и пройдите по вкладкам:

  • 🛡️ «Безопасность» — для начала снимите флажок «Принудительная проверка доступа для этого приложения». Когда всё заработает, можно вернуть проверку и настроить роли .
  • 👤 «Удостоверение» — здесь меняется учётная запись, от имени которой запускается dllhost.exe.
  • ⏱️ «Дополнительно» — параметр завершения процесса при простое. Значение по умолчанию держит процесс несколько минут после последнего вызова, это нормально.

Учётной записи из «Удостоверения» нужны:

  • для файловой базы — права на чтение и изменение каталога базы;
  • для клиент-серверной — сетевой доступ к серверу 1С на порт агента (по умолчанию 1540) и к диапазону портов рабочих процессов;
  • в обоих случаях — пользователь в самой информационной базе, под которым выполняется подключение.

Общие права запуска COM-приложений на компьютере задаются в свойствах Мой компьютер → вкладка Безопасность COM → Изменить ограничения в группах «Права доступа » и «Разрешения на запуск и активацию». Добавьте туда учётную запись вызывающей службы с разрешениями «Локальный запуск» и «Локальная активация», если вызов приходит с этого же компьютера.

Не выдавайте права группе «Все» на рабочем сервере. Через COM-соединение можно читать и менять данные базы. Права — только конкретной служебной учётной записи.

Проверка, что COM Connector работает

Регистрация прошла — убедитесь, что объект создаётся и подключается к базе.

Шаг 1. Реестр. Проверьте, что ProgID записан:

reg query "HKCR\V83.COMConnector\CLSID"

Для 32-битной регистрации на 64-битной системе добавьте ключ /reg:32. Команда вернёт CLSID — по нему в разделе HKCR\CLSID\{…}\InprocServer32 видно путь к библиотеке и, значит, версию платформы.

Шаг 2. Создание объекта и подключение. Сохраните скрипт как test1c.vbs:

Set Connector = CreateObject("V83.COMConnector")
Set Base = Connector.Connect("File=""D:\Bases\Buh"";Usr=""Администратор"";Pwd=""""")
WScript.Echo "Подключение есть: " & Base.Metadata.Name

Для клиент-серверной базы строка подключения выглядит так: Srvr="srv1c";Ref="buh";Usr="Администратор";Pwd="пароль". Запустите скрипт тем cscript.exe, разрядность которого совпадает с зарегистрированной библиотекой:

C:\Windows\System32\cscript.exe //nologo test1c.vbs

Если в имени пользователя или пароле есть кириллица, сохраните файл в кодировке UTF-16 LE (в «Блокноте» — «Юникод»), иначе скрипт передаст в базу нечитаемые символы.

Если имя конфигурации вывелось — коннектор зарегистрирован, версия совпадает, права есть.

Шаг 3. Из другой базы 1С проверка аналогичная: Новый COMОбъект("V83.COMConnector") и метод Connect с той же строкой. Учтите, что код выполняется там, где он написан: на клиенте нужен коннектор на компьютере пользователя, в серверной процедуре — на сервере 1С, с разрядностью рабочего процесса rphost.

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

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

Ещё один частый сценарий — всё работало и сломалось после обновления платформы. Установщик новой версии не всегда перерегистрирует коннектор, а при удалении старой регистрация может пропасть. Сделайте правилом: после обновления платформы на сервере перерегистрировать comcntr.dll и обновить компонент в приложении COM+, если оно используется.

Замена компонента в приложении COM+ требует остановить само приложение (правый клик → Завершить работу). В этот момент оборвутся все текущие внешние соединения — интеграции, обмены по расписанию. Делайте это вне рабочего времени.

Скрипт для автоматической регистрации

Когда версий платформы несколько, а компьютеров много, руками регистрировать неудобно. Пакетный файл ниже находит в Program Files\1cv8 самую свежую установленную версию и регистрирует её comcntr.dll. Запускать — от имени администратора.

@echo off
setlocal
set "ROOT=C:\Program Files\1cv8"
set "LAST="
for /f "delims=" %%D in ('dir /b /ad /on "%ROOT%\8.3.*"') do set "LAST=%%D"
if not defined LAST (
  echo Платформа 8.3 не найдена в %ROOT%
  exit /b 1
)
echo Регистрирую %ROOT%\%LAST%\bin\comcntr.dll
regsvr32 /s "%ROOT%\%LAST%\bin\comcntr.dll"
if errorlevel 1 (echo Ошибка регистрации) else (echo Готово)
endlocal

Сортировка dir /on идёт по имени как по строке. Для номеров вида 8.3.24.1586 и 8.3.25.1286 она даёт верный порядок, но если на компьютере одновременно лежат версии с разным числом цифр в последнем блоке, проверьте результат глазами или задайте версию явно.

Для 32-битной платформы замените ROOT на C:\Program Files (x86)\1cv8 и вызов на C:\Windows\SysWOW64\regsvr32.exe. Если в консоли кириллица выводится «кракозябрами», сохраните файл в кодировке OEM 866 или замените сообщения латиницей.

Тот же шаг на PowerShell (тоже от администратора):

$last = Get-ChildItem 'C:\Program Files\1cv8' -Directory -Filter '8.3.*' |
  Sort-Object { [version]$_.Name } | Select-Object -Last 1
Start-Process regsvr32.exe -ArgumentList "/s `"$($last.FullName)\bin\comcntr.dll`"" -Wait

Здесь версия сравнивается как число через [version], поэтому проблема со строковой сортировкой не возникает.

Как разнести регистрацию по компьютерам:

  • 🗓️ Планировщик заданий — задача с флажком «Выполнить с наивысшими правами», запуск после обновления платформы;
  • 🏢 Групповые политики — скрипт автозагрузки компьютера: он выполняется от системной учётной записи и не упирается в UAC;
  • 📦 Развёртывание платформы — если платформу ставите централизованно, добавьте регистрацию коннектора следующим шагом того же сценария.

Альтернатива COM-соединению вообще — HTTP-сервисы или OData в опубликованной базе. Они не зависят от разрядности и регистрации компонент, но требуют веб-сервера и доработки на стороне 1С. Для разовой выгрузки из Excel или скрипта COM Connector по-прежнему проще.

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

Нужно ли регистрировать COM Connector на каждом компьютере пользователя?
Только там, где выполняется код подключения. Если внешнее соединение открывается в серверной процедуре 1С — достаточно сервера. Если из Excel у бухгалтера — на его компьютере.
Можно ли держать два COM Connector разных версий одновременно?
Через regsvr32 — нет, ProgID V83.COMConnector указывает на одну библиотеку. Обходной путь — несколько приложений COM+ или запуск разных версий на разных компьютерах.
Почему regsvr32 пишет «успешно», а объект не создаётся?
Почти всегда это разрядность: библиотеку зарегистрировали в одной ветке реестра, а программа ищет в другой. Сверьте разрядность программы и использованного regsvr32.
Нужна ли лицензия 1С для COM-соединения?
Да. Внешнее соединение занимает клиентскую лицензию так же, как обычный сеанс пользователя.
Чем COM Connector отличается от запуска 1С как COM-сервера (V83.Application)?
V83.Application запускает полноценный клиент с интерфейсом и работает медленнее. COM Connector открывает соединение без интерфейса — для обменов и выгрузок он подходит лучше.