Как исправить ошибку 0x80070005 «Отказано в доступе» при создании COM-соединения в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При организации интеграции между информационными базами 1С с использованием COM-соединения разработчики и администраторы нередко сталкиваются с ошибкой инициализации объекта. В клиент-серверном варианте подключение может отрабатывать штатно, тогда как в файловой базе или при смене пользователя возникает исключение вида: Ошибка при вызове конструктора (COMОбъект) -2147024891(0x80070005): Отказано в доступе.

Разберем детально, чем отличается работа COM-коннектора в различных режимах работы 1С, почему возникает данная ошибка и какими способами можно восстановить корректный доступ к внешнему объекту.

Посмотрим на стандартный пример создания подключения в программном коде 1С:


Попытка
    COMСоединитель = Новый COMОбъект("V83.COMConnector");
    ПараметрыПодключения = "File=""C:\Bases\Demo""; Usr=""Admin""; Pwd=""123"";";
    ВнешнееСоединение = COMСоединитель.Connect(ПараметрыПодключения);
Исключение
    Сообщить("Не удалось установить соединение: " + ОписаниеОшибки());
КонецПопытки;

В чем разница выполнения COM-соединения в файловой и серверной базах?

Проанализируем контекст исполнения кода. Разница между файловой базой и клиент-серверным вариантом (SQL) заключается в учетной записи операционной системы, от имени которой выполняется создание COM-объекта:

  1. В клиент-серверной базе (на сервере 1С): серверный код выполняется в контексте системной службы ragent.exe. Соответственно, запуск COM-компонента и обращение к ресурсам происходят от имени служебного пользователя операционной системы (например, usr1cv8), под которым стартует служба сервера 1С.
  2. В файловой базе (на клиенте): весь код выполняется локально в рамках процесса 1cv8.exe или 1cv8c.exe от имени текущего интерактивного пользователя Windows. Если у этого пользователя отсутствуют разрешения на запуск DCOM-компонентов, чтение соответствующих веток реестра или доступ к временным каталогам, операционная система возвращает ошибку 0x80070005.

Способ 1. Корректная локальная регистрация библиотеки comcntr.dll

Выясним частую ошибку регистрации. Запуск утилиты regsvr32 по сетевому пути (например, \\Server\1C\bin\comcntr.dll) может приводить к сбоям из-за политик безопасности Windows для сетевых расположений.

Выполним шаги по локальной регистрации:

  1. Убедимся, что библиотека comcntr.dll нужной версии платформы находится на локальном диске компьютера.
  2. Запустим командную строку cmd.exe обязательно от имени администратора.
  3. Выполним команду регистрации с точным локальным путем: regsvr32 "C:\Program Files (x86)\1cv8\8.3.10.2561\bin\comcntr.dll"

Способ 2. Настройка прав безопасности DCOM

Ошибка 0x80070005 напрямую указывает на нехватку разрешений в подсистеме DCOM операционной системы. Настроим параметры безопасности через системную оснастку:

  1. Нажмем сочетание клавиш Win + R, введем команду dcomcnfg и нажмем Enter.
  2. В открывшемся окне перейдем по дереву: Службы компонентов -> Компьютеры -> Мой компьютер.
  3. Откроем свойства узла Мой компьютер и перейдем на вкладку Безопасность COM.
  4. В секции Права доступа нажмем кнопку Изменить ограничения... и добавим учетные записи СИСТЕМА (SYSTEM), Интерактивные (INTERACTIVE), а также текущего пользователя или группу пользователей. Предоставим им флаги Локальный доступ.
  5. В секции Права на запуск и активацию нажмем кнопку Изменить ограничения... и для тех же пользователей предоставим права Локальный запуск и Локальная активация.
  6. Применим изменения и перезагрузим компьютер или перезапустим сеанс пользователя.

Способ 3. Проверка прав на системный реестр и файловые каталоги

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

  1. Права на ветки реестра: запустим редактор реестра regedit и проверим права на чтение подразделов HKEY_CLASSES_ROOT\V83.COMConnector, HKEY_CLASSES_ROOT\V83.COMConnector.1 и соответствующего ветке CLSID (включая InprocServer32). Пользователь или группа «Пользователи» должны иметь права на чтение этих разделов.
  2. Влияние UAC (Контроль учетных записей): в Windows даже учетная запись локального администратора по умолчанию работает с ограниченным маркером доступа. Если запуск программы происходит без явного повышенного контекста, системные ограничения могут вызывать отказ в доступе.
  3. Доступ к каталогам файловой базы и кэша: убедимся, что учетная запись имеет полные права на чтение, запись и изменение каталога самой файловой базы (файла 1Cv8.1CD), а также на папки временных файлов %TEMP%, %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8.

Способ 4. Изоляция COM-коннектора в отдельном приложении COM+

Для стабильной работы и устранения конфликтов прав доступа между разными процессами и разрядностями рекомендуется настроить серверное приложение COM+:

  1. Откроем оснастку dcomcnfg (Службы компонентов).
  2. Перейдем в ветку Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Создадим новое приложение: нажмем правой кнопкой мыши по папке Приложения COM+ -> Создать -> Приложение.
  4. В мастере выберем Установить новое приложение -> тип Серверное приложение (Server application).
  5. На этапе выбора удостоверения укажем конкретную учетную запись с гарантированными локальными правами (либо системную учетную запись).
  6. В созданном приложении раскроем ветку Компоненты, нажмем Создать -> Компонент -> Установка новых компонентов и выберем локальный файл comcntr.dll.
  7. В свойствах созданного приложения COM+ на вкладке Безопасность снимем флаг Принудительная проверка доступа для приложений или настроим нужный уровень авторизации.

При таком подходе вызовы COM-объекта будут выполняться в изолированном процессе dllhost.exe от имени заданной учетной записи, что полностью решает проблему нехватки прав у локального пользователя.

Альтернативные варианты интеграции

Технология COM-соединения жестко привязана к операционной системе Windows, разрядности библиотек и точному совпадению версий платформы 1С. В современной разработке при возникновении сложностей с настройкой DCOM рекомендуется рассмотреть альтернативные способы взаимодействия:

  1. HTTP-сервисы и Web-сервисы: публикация базы на веб-сервере (IIS или Apache) позволяет передавать данные через REST/JSON или SOAP/XML независимо от настроек COM-прав и версий операционных систем.
  2. Стандартный интерфейс OData: встроенный REST-интерфейс платформы 1С:Предприятие, позволяющий выполнять чтение и запись прикладных объектов без прямого использования COM-коннекторов.
  3. Файловый обмен или брокеры сообщений: организация асинхронного обмена через структурированные файлы (JSON, XML) или очереди сообщений (RabbitMQ, Kafka).
← На главную