Как исправить ошибки безопасного режима и отказа в доступе при создании COM-объекта на сервере 1С

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

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

Разберем по шагам причины такого поведения платформы 1С:Предприятие и операционной системы Windows, а также рассмотрим правильные способы настройки серверного окружения и альтернативные варианты решения задачи.

Причина 1: Срабатывание безопасного режима платформы 1С

Когда в коде вызывается конструктор создания внешнего объекта:


&НаСервере
Процедура ИнициализироватьCOMОбъект()
    App = Новый COMОбъект("Acroexch.app");
КонецПроцедуры

Платформа может вернуть исключение: «Установлен безопасный режим. Выполнение операции запрещено». Вызов метода УстановитьБезопасныйРежим(Ложь) внутри непривилегированного модуля не дает результата, поскольку платформа запрещает отключать ограничения безопасности коду, который сам выполняется в ограниченном контексте.

Проанализируем шаги, необходимые для корректного запуска кода на стороне 1С:

  1. Использование привилегированного общего модуля: перенесем код создания и вызова COM-объекта в общий модуль, у которого в свойствах установлены флаги Сервер и Привилегированный, а флаг Безопасный режим снят. В привилегированном контексте ограничения на запуск внешних библиотек и выполнение системных команд снимаются автоматически.
  2. Настройка профилей безопасности кластера 1С: если на уровне кластера серверов 1С включены профили безопасности, платформа жестко блокирует создание COM-объектов вне зависимости от контекста модуля. В утилите администрирования кластера серверов 1С откроем свойства соответствующего профиля безопасности и добавим в список разрешенных COM-классов строку с идентификатором нужного объекта (например, Acroexch.app или соответствующий CLSID).
  3. Проверка защиты от опасных действий: убедимся, что для пользователя базы данных не включена блокировка выполнения потенциально опасных действий, либо отключим её программно перед вызовом функционала.

Причина 2: Ошибка «-2147024891(0x80070005): Отказано в доступе» в DCOM

После снятия ограничений платформы 1С выполнение передается операционной системе Windows. Если служба сервера 1С не имеет достаточных прав на запуск и взаимодействие с конкретным OLE/COM-компонентом, операционная система возвращает ошибку 0x80070005.

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

Разберем настройку прав через оснастку системных компонентов Windows:

  1. Нажмем сочетание клавиш Win + R, введем команду dcomcnfg и нажмем клавишу Enter.
  2. Перейдем по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. В списке приложений найдем нужный компонент (для Acrobat это может быть Adobe Acrobat Document, AcroExch или соответствующий AppID из системного реестра).
  4. Откроем Свойства компонента и перейдем на вкладку Безопасность.
  5. В разделах Права на запуск и активацию и Права доступа переключим переключатели в положение Настроить и нажмем Изменить.
  6. Добавим пользователя службы 1С (например, USR1CV8) и предоставим ему полные флаги: Локальный запуск, Локальная активация и Локальный доступ.
  7. Перейдем на вкладку Удостоверение (Identity). Если COM-компонент требует интерактивной среды, переключим запуск с «Запускающий пользователь» на Указанный пользователь (This user) и введем учетные данные локального администратора или специально выделенной сервисной учетной записи.

Архитектурные и системные ограничения COM-серверов на сервере 1С

При настройке COM-соединений на серверной стороне необходимо учитывать несколько критических факторов:

  1. Несоответствие разрядности (32 и 64 бит): если сервер 1С:Предприятия является 64-разрядным (x86-64), а сторонний программный пакет (Adobe Acrobat) установлен в 32-разрядном варианте, прямой запуск COM-объекта будет невозможен без предварительной регистрации компонента в виде отдельного серверного приложения в оснастке COM+.
  2. Отсутствие системных каталогов Desktop для службы: службам Windows для взаимодействия с COM-интерфейсами офисных и графических пакетов требуются физически существующие папки рабочего стола. Проверим и при необходимости создадим вручную следующие каталоги, предоставив права учетной записи USR1CV8:
    • C:\Windows\System32\config\systemprofile\Desktop
    • C:\Windows\SysWOW64\config\systemprofile\Desktop
  3. Лицензионные и серверные ограничения Adobe Acrobat: OLE-сервер Acroexch.app присутствует только в полных версиях Acrobat (Standard или Pro) и официально не поддерживается разработчиком для использования в фоновом режиме на серверных ОС из-за риска зависания модальных окон.

Альтернативные и более надежные способы обработки PDF на сервере

Для стабильной работы фоновых заданий и серверного кода рекомендуется отказаться от нестабильных OLE/COM-объектов в пользу специализированных утилит и библиотек:

  1. Использование консольных утилит (CLI): вызов внешних программ через ЗапуститьПриложение() не зависит от служб DCOM и разрядности сервера 1С. Для операций с PDF отлично подходят:
    • pdftk — объединение, разделение и наложение штампов на страницы;
    • Ghostscript — конвертация, растеризация и сжатие документов;
    • qpdf — преобразование, оптимизация и шифрование файлов.
  2. Внешние компоненты Native API: кроссплатформенные библиотеки на базе открытых движков (например, PDFium), которые подключаются непосредственно через ПодключитьВнешнююКомпоненту() и работают одинаково быстро как под управлением Windows, так и на Linux-серверах.
  3. Перенос обработки на сторону клиента: если работа с документом инициируется интерактивно конкретным пользователем, вызов COM-объекта переносится в контекст &НаКлиенте, где он выполняется в сеансе Windows пользователя без необходимости сложного администрирования серверных служб DCOM.
← На главную