comcntr.dll не работает: регистрация, разрядность и права DCOM
Содержание
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. Порядок действий:
- Нажмите
Win, наберитеcmd, на найденной «Командной строке» щёлкните правой кнопкой и выберитеЗапуск от имени администратора. - Подтвердите запрос UAC.
- Выполните команду, подставив свою версию:
regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\comcntr.dll"
- Дождитесь окна «Успешное выполнение 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\1cv8 | C:\Windows\System32\regsvr32.exe |
| 32-битный процесс: 32-битный Excel/Access, 32-битный клиент 1С, старые программы | 32-битная, Program Files (x86)\1cv8 | C:\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+
- Нажмите
Win+R, введитеdcomcnfg, нажмите Enter. Откроется консоль «Службы компонентов». - Разверните
Службы компонентов → Компьютеры → Мой компьютер → Приложения COM+. - Щёлкните правой кнопкой по
Приложения COM+и выберитеСоздать → Приложение. - В мастере выберите «Создать новое приложение», задайте имя, например
V83COMConnector, и тип «Серверное приложение». - На шаге выбора учётной записи укажите «Указанный пользователь» и введите пользователя, у которого есть доступ к каталогу базы (для файловой) или к серверу 1С. Встроенный «Интерактивный пользователь» подходит только для тестов: без вошедшего в систему пользователя приложение не стартует.
- Завершите мастер.
Добавление comcntr.dll в приложение
- Разверните созданное приложение, щёлкните правой кнопкой по
Компоненты→Создать → Компонент. - Выберите «Установка новых компонентов» и укажите
comcntr.dllнужной версии и разрядности. - Завершите мастер. В списке появится
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 по-прежнему проще.