Ошибка 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, причём минут за пять. Но если после всех этих шагов ошибка всё равно никуда не делась — проверьте, не ссылается ли случайно код вашей конфигурации на какой-нибудь устаревший V82COMConnector, и обязательно убедитесь, что версии платформы на клиентских машинах и на сервере полностью совпадают.
Официальная документация: Microsoft Learn
Часто задаваемые вопросы
Что такое Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
Ошибка 0x80040154 «Класс не зарегистрирован» — это, вроде бы, типовая проблема обмена в 1С, но при этом довольно коварная. Пока не разберёшься с COM-регистрацией, синхронизация просто не заработает. Выше я постарался разложить её по полочкам — от того, как её диагностировать, до трёх проверенных способов решения.
Как правильно настроить Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
Самое главное, когда вы устраняете эту проблему — не действовать наугад, тыкая пальцем в реестр, а двигаться строго по порядку: сначала учётка агента, потом перерегистрация comcntr.dll, и только затем COM+-приложение. И, конечно же, всегда учитывайте особенности своей конфигурации (файловая база или серверная, 64- или 32-битная платформа) и требования безопасности.
Какие типичные ошибки возникают при работе с Ошибка 0x80040154 «Класс не зарегистрирован» в 1С: полный разбор и решение?
По моему опыту, чаще всего мы наступаем на одни и те же грабли: кривая COM-регистрация, нехватка прав у учётной записи агента или банальное несовпадение версий платформы на клиенте и сервере. Если вам некогда или не хочется возиться с этим самостоятельно — можете смело отдать настройку специалистам ITfresh.
ООО «АйТи Фреш» возьмёт это на себя
Не хватает времени, или просто нет своих специалистов, чтобы заниматься IT? Мы с удовольствием настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами как в Москве, так и по всей России. У нас свой дата-центр, где работают 8 серверов Dell Xeon Platinum 8280 на площадке МТС.
Комментарии