Распространенная ситуация в практике системного администрирования 1С: интеграция или обмен данными через COM-соединение прекрасно работает, пока администратор или пользователь находится в сессии на сервере. Однако, как только все пользователи выходят из системы (выполняют Logoff), регламентные задания начинают выдавать ошибки. Чаще всего 1С рапортует о «неверном логине или пароле», хотя учетные данные не менялись. Разберем детально, почему это происходит и как настроить сервер для стабильной работы.
Проанализируем архитектуру Windows. Когда пользователь входит в систему, создается интерактивная сессия, загружается его профиль и ветки реестра HKEY_CURRENT_USER. Если COM-объект 1С (обычно это V83.COMConnector) настроен на запуск от имени «Интерактивного пользователя», он напрямую зависит от наличия активного входа в систему.
Как только последний пользователь выходит из системы, Windows инициирует процесс очистки: завершаются процессы в пользовательской сессии и, что критично, выгружается куст реестра пользователя. В этот момент COM-соединение теряет доступ к необходимым ключам реестра и временным папкам профиля. Ошибка «Неверный логин или пароль» в данном случае является ложной — система просто не может получить доступ к контексту безопасности или файлам базы данных (в файловом варианте), возвращая наиболее близкий по смыслу код ошибки.
Рассмотрим самый быстрый способ исправления ситуации, который подтвердил свою эффективность на практике. Нам необходимо заставить Windows запускать COM-объект в фиксированном контексте, не зависящем от того, кто залогинен на сервере.
Win + R и введем команду dcomcnfg для открытия оснастки «Службы компонентов».V83.COMConnector (или V82.COMConnector, в зависимости от версии платформы).userv81c или специально созданная сервисная учетная запись).Важный нюанс: После этого изменения COM-объект будет всегда запускаться в контексте указанного пользователя, и его работоспособность не будет зависеть от наличия активных RDP-сессий.
Разберем более продвинутый метод, который позволяет изолировать COM-соединение в отдельном процессе dllhost.exe. Это предотвращает падение основного рабочего процесса 1С при сбоях в COM и обеспечивает лучшую управляемость.
dcomcnfg перейдем в ветку «Приложения COM+».1C_COM_Connector) и установим тип «Серверное приложение».comcntr.dll в папке установки платформы 1С (например, C:\Program Files\1cv8\8.3.X.X\bin\comcntr.dll).Теперь при обращении к 1С через COM будет порождаться отдельный процесс, работающий под правами сервисного пользователя постоянно.
Проанализируем еще одну специфическую причину. Иногда COM-объекты 1С требуют инициализации некоторых подсистем Windows, которые жестко завязаны на наличие папки рабочего стола в профиле. Если сервис работает под системной учетной записью (System), этих папок может не быть по умолчанию.
Посмотрим, как это исправить. Необходимо вручную создать директории:
C:\Windows\System32\config\systemprofile\DesktopC:\Windows\SysWOW64\config\systemprofile\Desktop (для 64-битных ОС)После создания папок убедимся, что у пользователя, под которым запускается COM (наш сервисный аккаунт), есть полные права доступа к этим папкам. Это часто лечит «необъяснимые» падения при отсутствии активных сессий.
Если вышеуказанные меры не помогают, проверим настройки политики выгрузки профилей. Рассмотрим, как запретить Windows принудительно закрывать реестр пользователя.
gpedit.msc.Это предотвратит ситуацию, когда операционная система обрывает связи COM-объекта с веткой HKEY_CURRENT_USER сразу после логаута.
Напоследок напомним стандартный пример инициализации COM-соединения в коде 1С, который мы будем использовать после проведения всех серверных настроек:
Попытка
V83COMConnector = Новый COMОбъект("V83.COMConnector");
ПараметрыСвязи = "Srvr='ServerName';Ref='BaseName';Usr='Login';Pwd='Password';";
Соединение = V83COMConnector.Connect(ПараметрыСвязи);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Подведем итог. Технология COM считается устаревающей, но в экосистеме 1С она все еще занимает нишу быстрых локальных обменов. Основная проблема ее «отваливания» на сервере — это зависимость от сессии пользователя. Использование COM+ приложения с жестко заданным удостоверением (Identity) является «золотым стандартом» решения этой проблемы, обеспечивающим стабильную работу фоновых заданий в режиме 24/7.