Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение

Обмен данными между базами 1С работал стабильно — и вдруг в журнале регистрации появляется лаконичная строка: «Не удалось подключиться к приложению: -2147221164 (0x80040154): Класс не зарегистрирован». Иногда ошибка всплывает при ручном запуске синхронизации, иногда — только в фоновом задании. Результат один: обмен не работает, данные не уходят, бухгалтерия нервничает.
В этой статье разберём, что именно означает код 0x80040154, почему он возникает на серверах с 1С:Предприятие, и как устранить проблему тремя разными способами — в зависимости от конфигурации вашего сервера.
Что такое 0x80040154 и при чём тут COM
Код ошибки 0x80040154 (или REGDB_E_CLASSNOTREG) — стандартный Windows-код, который означает: запрошенный COM-класс не найден в реестре. Когда 1С выполняет обмен через COM-соединение, она обращается к компоненту V83COMConnector, реализованному в файле comcntr.dll. Если эта DLL не зарегистрирована в реестре Windows или зарегистрирована для другой версии платформы, система возвращает именно эту ошибку.
Чаще всего проблема возникает в следующих ситуациях:
- Платформа 1С обновлялась, но перерегистрация COM-компонента не выполнялась
- Сервер 1С работает на 64-битной системе, а COM-коннектор пытается загрузиться в 32-битном контексте (или наоборот)
- Фоновое задание запускается под служебной учётной записью, у которой нет прав на файловую базу или COM+-приложение
- После переустановки или восстановления ОС регистрация DLL слетела
comcntr.dll всегда выполняется только на сервере 1С, а не на клиентских машинах. Регистрировать DLL на клиенте бессмысленно — обмен инициирует серверная сторона.
Шаг 1. Проверяем права учётной записи
Прежде чем трогать реестр и DLL, убедитесь в простом: под какой учётной записью запускается Агент сервера 1С? Откройте Службы (services.msc), найдите Агент сервера 1С:Предприятие 8.3 и посмотрите на вкладку «Вход в систему».
Если агент работает под системной учётной записью (LocalSystem или NT AUTHORITY\SYSTEM), а информационная база хранится в файловом каталоге сети — доступа к ней, скорее всего, нет. Нужно либо перевести агент на доменную учётную запись, либо выдать права на папку базы.
Для файловой базы откройте свойства папки, перейдите в «Безопасность» и добавьте учётную запись агента с правами «Изменение»:
# PowerShell: выдача прав на папку базы
$path = "D:\1C_Bases\Trade"
$account = "DOMAIN\svc_1cagent"
$acl = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$account, "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")
$acl.SetAccessRule($rule)
Set-Acl $path $acl
Write-Host "Права выданы для $account на $path"
Шаг 2. Перерегистрируем comcntr.dll
Это самое распространённое решение. После обновления платформы старый comcntr.dll может оставаться в реестре, а новый — не регистрироваться автоматически. Нужно сначала снять старую регистрацию, потом зарегистрировать актуальную версию.
0x80070005.
64-битная платформа 1С на 64-битной Windows
Большинство современных установок используют именно этот вариант. DLL находится в Program Files (без x86):
:: Снимаем регистрацию старой версии
regsvr32 /u "C:\Program Files\1cv8\8.3.24.1691\bin\comcntr.dll"
:: Если на сервере осталась и 32-битная версия
regsvr32 /u "C:\Program Files (x86)\1cv8\8.3.24.1691\bin\comcntr.dll"
:: Регистрируем актуальную версию
regsvr32 "C:\Program Files\1cv8\8.3.27.1786\bin\comcntr.dll"
Номер версии замените на актуальный. Найти нужный путь можно так:
:: Список установленных версий платформы
dir "C:\Program Files\1cv8\" /b
dir "C:\Program Files (x86)\1cv8\" /b 2>nul
32-битная платформа 1С на 64-битной Windows
В этом случае 32-битные COM-компоненты регистрируются через SysWOW64\regsvr32.exe:
:: Снимаем старую
C:\Windows\SysWOW64\regsvr32.exe /u "C:\Program Files (x86)\1cv8\8.3.24.1691\bin\comcntr.dll"
:: Регистрируем новую
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1cv8\8.3.27.1786\bin\comcntr.dll"
После успешной регистрации появится диалог «DllRegisterServer succeeded». Если этого не произошло — перечитайте предупреждение выше и проверьте права запуска.
Шаг 3. Создаём COM+-приложение вручную
Если перерегистрация DLL не помогла, проблема может быть глубже: COM+-приложение V83COMConnector либо отсутствует, либо настроено неправильно. Создадим его вручную через оснастку «Службы компонентов».
Откройте Панель управления → Администрирование → Службы компонентов (или выполните dcomcnfg). В дереве слева разверните: Службы компонентов → Компьютеры → Мой компьютер → COM+ приложения.
Создание нового приложения
- Щёлкните правой кнопкой по папке COM+ Приложения → Создать → Приложение
- Выберите «Создать новое приложение»
- Введите имя:
V83COMConnector, тип активации: Серверное приложение - На шаге выбора учётной записи укажите служебную учётную запись агента 1С — это критично для фоновых заданий
- Пройдите оставшиеся шаги мастера без изменений
Добавление компонента comcntr.dll
- Разверните созданное приложение
V83COMConnector→ папка Компоненты - Правая кнопка → Создать → Компонент → «Установить новые компоненты»
- Укажите путь к актуальному
comcntr.dllиз папки нужной версии платформы - Завершите мастер
Настройка безопасности приложения
После добавления компонента откройте свойства V83COMConnector, вкладка Безопасность:
- Снимите галочку «Применять проверки доступа для этого приложения»
- Установите уровень ограничений: Без ограничений
USR1CV8 и учётную запись, под которой выполняется синхронизация.
Проверяем результат
После любого из шагов перезапустите службу Агента сервера 1С и попробуйте запустить обмен вручную. В журнале регистрации 1С (Администрирование → Журнал регистрации, фильтр по событию «Ошибка») ошибка 0x80040154 не должна появляться.
Для быстрой проверки, зарегистрирован ли COM-класс, воспользуйтесь PowerShell:
# Проверяем наличие ProgID V83COMConnector в реестре
$progid = "V83COMConnector"
$clsid = (Get-ItemProperty "HKLM:\SOFTWARE\Classes\$progid\CLSID" -ErrorAction SilentlyContinue).'(default)'
if ($clsid) {
Write-Host "COM-класс найден: CLSID = $clsid" -ForegroundColor Green
$path64 = "HKLM:\SOFTWARE\Classes\CLSID\$clsid"
$path32 = "HKLM:\SOFTWARE\WOW6432Node\Classes\CLSID\$clsid"
if (Test-Path $path64) { Write-Host "64-bit регистрация: OK" -ForegroundColor Green }
if (Test-Path $path32) { Write-Host "32-bit регистрация: OK" -ForegroundColor Green }
} else {
Write-Host "COM-класс V83COMConnector НЕ найден в реестре!" -ForegroundColor Red
Write-Host "Выполните регистрацию comcntr.dll через regsvr32"
}
Дополнительные причины и редкие случаи
Код ссылается на V82COMConnector
Если в конфигурации 1С в обработчиках обмена используется устаревший идентификатор V82COMConnector вместо V83COMConnector, ни одна из команд выше не поможет — нужно исправить код. Откройте конфигуратор, найдите модуль обмена и замените все вхождения.
Тип приложения: Серверное vs Библиотечное
Серверное COM+-приложение запускается в отдельном процессе (dllhost.exe). Если на сервере жёсткие ограничения по запуску процессов или строгий UAC, попробуйте переключить тип на «Библиотечное приложение» — тогда DLL будет загружаться прямо в процесс вызывающей программы, без создания нового dllhost.
Зависшие процессы dllhost.exe
После исправления ошибки иногда остаются зависшие экземпляры dllhost.exe, которые держат старую версию DLL и не дают зарегистрировать новую. Завершите их вручную через PowerShell:
# Завершить зависшие процессы COM-коннектора
Get-WmiObject Win32_Process -Filter "Name='dllhost.exe'" | ForEach-Object {
if ($_.CommandLine -like "*comcntr*" -or $_.CommandLine -like "*1cv8*") {
Write-Host "Завершаем PID $($_.ProcessId)"
Stop-Process -Id $_.ProcessId -Force
}
}
Write-Host "Готово"
Если точно идентифицировать процессы не получается — безопаснее перезагрузить сервер в ближайшее окно обслуживания. Принудительное завершение чужих процессов может прервать активные сеансы пользователей.
Профилактика: скрипт обновления COM-регистрации
Ошибка 0x80040154 почти всегда возникает после обновления платформы 1С. Добавьте перерегистрацию в регламент обновления. Вот скрипт, который можно запускать сразу после установки новой версии платформы:
# update-1c-com.ps1 — запускать после каждого обновления платформы 1С
# Параметр: путь к новой папке bin
param([string]$NewBinPath)
if (-not $NewBinPath) {
# Автоопределение последней версии
$base = "C:\Program Files\1cv8"
$NewBinPath = Get-ChildItem $base -Directory |
Sort-Object Name -Descending |
Select-Object -First 1 |
ForEach-Object { "$($_.FullName)\bin" }
Write-Host "Автовыбор: $NewBinPath"
}
$dll = Join-Path $NewBinPath "comcntr.dll"
if (-not (Test-Path $dll)) {
Write-Error "Файл не найден: $dll"; exit 1
}
# Снимаем все старые регистрации
Get-ChildItem "C:\Program Files\1cv8" -Recurse -Filter "comcntr.dll" |
Where-Object { $_.FullName -ne $dll } |
ForEach-Object {
Write-Host "Снятие: $($_.FullName)"
& regsvr32 /s /u $_.FullName
}
# Регистрируем новую версию
Write-Host "Регистрация: $dll"
& regsvr32 /s $dll
if ($LASTEXITCODE -eq 0) {
Write-Host "Успешно зарегистрировано" -ForegroundColor Green
} else {
Write-Error "Ошибка регистрации. Запустите от имени администратора."
}
Сохраните скрипт как update-1c-com.ps1 и добавьте его запуск в регламент обновления платформы — или в задание планировщика, срабатывающее на появление новых подпапок в C:\Program Files\1cv8. Такой подход полностью исключает класс ошибок, связанных с устаревшей регистрацией COM-компонентов.
Итог
Ошибка -2147221164 (0x80040154) в 1С — неприятная, но полностью решаемая. Порядок диагностики:
- Проверьте права учётной записи Агента сервера 1С на папку информационной базы — особенно если используется файловая база или сетевой каталог
- Перерегистрируйте comcntr.dll через
regsvr32от имени администратора, используя путь к актуальной версии платформы (не старой) - Если не помогло — пересоздайте COM+-приложение
V83COMConnectorчерез оснастку «Службы компонентов» и настройте безопасность - Добавьте перерегистрацию DLL в регламент обновления платформы, чтобы ошибка не повторялась
Большинство случаев решается на шаге 2 за 5 минут. Если после всех шагов ошибка остаётся — проверьте, не ссылается ли код конфигурации на устаревший V82COMConnector, и убедитесь, что версии платформы на клиентах и сервере совпадают.
Официальная документация: Microsoft Learn
Часто задаваемые вопросы
Что такое Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.
Как правильно настроить Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
Для корректной настройки Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.
Какие типичные ошибки возникают при работе с Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
Наиболее частые ошибки при работе с Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.
ООО «АйТи Фреш» возьмёт это на себя
Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах. Собственный дата-центр, команда из 8 серверов Dell Xeon Platinum 8280 на базе МТС.