При работе с 1С:Предприятие через COM-соединение системные администраторы и разработчики часто сталкиваются с неприятной ошибкой: «Процесс сервера не может быть запущен, так как указана неправильная идентификация. Проверьте правильность указания имени пользователя и пароля». Код ошибки — -2147467238(0x8000401A).
Ситуация осложняется тем, что соединение может работать стабильно некоторое время (например, после перезагрузки сервера или ручной перерегистрации компоненты), а затем «отваливаться» без видимых причин. В этой статье мы подробно разберем, почему это происходит, и проанализируем все шаги по полному устранению данной проблемы.
Ошибка 0x8000401A в контексте Windows означает CO_E_RUNAS_LOGON_FAILURE. Это сигнализирует о том, что служба COM+ пытается запустить процесс от имени определенного пользователя, но не может этого сделать. Чаще всего это происходит не из-за того, что пароль действительно «неправильный», а из-за ограничений операционной системы на запуск процессов в фоновом режиме или из-за выгрузки профиля пользователя из памяти.
Рассмотрим основные сценарии решения этой задачи.
Наиболее частая причина сбоев — неправильно настроенное «Удостоверение» (Identity) в консоли администрирования COM+. Рассмотрим, как правильно настроить компоненту V83.COMConnector.
dcomcnfg (также полезна консоль администрирования серверов 1С через ras).V83_ComConnector).V83_ComConnector и выберем «Свойства».Важный момент: если там выбрано «Текущий вошедший пользователь» (Interactive User), то соединение будет работать только тогда, когда на сервере активна RDP-сессия под этим пользователем. Как только вы выйдете из системы, COM-объект перестанет создаваться.
Проанализируем правильный подход: выберем пункт «Указанный пользователь». Нажмем «Обзор» и выберем пользователя, от имени которого работает сервер 1С (например, USR1CV8). Обязательно введем и подтвердим актуальный пароль. Именно это действие чаще всего восстанавливает работу обмена.
Даже если пароль указан верно, операционная система может запрещать пользователю запуск процессов в «пакетном» режиме. Проверим настройки безопасности сервера.
secpol.msc) или обратимся к системному администратору для настройки доменных политик.USR1CV8).Это позволит системе инициализировать процесс dllhost.exe (в котором работает COM-объект) без необходимости полноценного интерактивного входа пользователя в систему.
Иногда ошибка возникает из-за того, что Windows «оптимизирует» ресурсы и выгружает реестр неактивного пользователя. Рассмотрим ситуацию, когда компонента «падает» через некоторое время после запуска.
Для предотвращения этой проблемы в настройках некоторых служб помогает включение флага «Загружать профиль пользователя» (Load User Profile). Если вы используете IIS для веб-сервисов, которые инициируют COM-соединение, этот флаг нужно установить в значение True в настройках пула приложений.
Также разберем один «мистический», но крайне эффективный способ, связанный с архитектурой Windows 64-bit. Иногда COM-объектам требуются папки рабочего стола для инициализации окружения, даже если графический интерфейс не используется. Создадим их вручную:
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\DesktopПосле создания папок убедимся, что у пользователя USR1CV8 есть полные права доступа к ним.
Проанализируем еще одну важную настройку в свойствах приложения V83_ComConnector в консоли COM+.
Для стабильного решения проблем с правами рекомендуется использовать «Серверное приложение». В этом режиме COM-объект запускается в отдельном процессе dllhost.exe, что позволяет системе четко изолировать права доступа и использовать именно то удостоверение, которое мы настроили на Шаге 1. Если приложение работает как «Библиотечное», оно пытается наследоваться от прав вызывающего процесса (например, процесса 1С), что часто приводит к конфликтам идентификации.
Если после обновлений платформы 1С ошибка сохраняется, возможно, в системе зарегистрирована старая версия библиотеки или произошел конфликт в реестре. Выполним перерегистрацию:
regsvr32 /u "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Посмотрим на результат выполнения: должно появиться сообщение DllRegisterServer в ... успешно. Если вы используете 64-битную платформу 1С, убедитесь, что регистрируете библиотеку именно из папки Program Files, а не Program Files (x86), если только ваша задача не требует обратного.
Рассмотрим случай, когда ошибка 0x8000401A возникает при попытке 1С программно открыть Excel (например, при загрузке данных). Это часто связано с разрядностью: 1С может быть 64-битной, а установленный Microsoft Office — 32-битным. В этом случае настройки в dcomcnfg нужно проводить не для V83.COMConnector, а для компоненты Microsoft Excel Application.
Процедура аналогична: в свойствах Microsoft Excel Application на вкладке «Удостоверение» нужно указать конкретного пользователя с административными правами вместо «Интерактивного пользователя».
Для окончательного решения проблемы «неправильной идентификации» мы рекомендуем придерживаться комплексного подхода: указать конкретного пользователя в свойствах COM+, разрешить этому пользователю вход в качестве пакетного задания и создать необходимые системные папки Desktop. Эти действия в 99% случаев устраняют ошибку и обеспечивают стабильную работу обменов в 1С.