Почему отключается COM-соединение 1С при выходе пользователей из Windows Server и как это исправить?

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

Распространенная ситуация в практике системного администрирования 1С: интеграция или обмен данными через COM-соединение прекрасно работает, пока администратор или пользователь находится в сессии на сервере. Однако, как только все пользователи выходят из системы (выполняют Logoff), регламентные задания начинают выдавать ошибки. Чаще всего 1С рапортует о «неверном логине или пароле», хотя учетные данные не менялись. Разберем детально, почему это происходит и как настроить сервер для стабильной работы.

Выясним причину проблемы: изоляция сессий и выгрузка профиля

Проанализируем архитектуру Windows. Когда пользователь входит в систему, создается интерактивная сессия, загружается его профиль и ветки реестра HKEY_CURRENT_USER. Если COM-объект 1С (обычно это V83.COMConnector) настроен на запуск от имени «Интерактивного пользователя», он напрямую зависит от наличия активного входа в систему.

Как только последний пользователь выходит из системы, Windows инициирует процесс очистки: завершаются процессы в пользовательской сессии и, что критично, выгружается куст реестра пользователя. В этот момент COM-соединение теряет доступ к необходимым ключам реестра и временным папкам профиля. Ошибка «Неверный логин или пароль» в данном случае является ложной — система просто не может получить доступ к контексту безопасности или файлам базы данных (в файловом варианте), возвращая наиболее близкий по смыслу код ошибки.

Решение 1: Настройка удостоверения (Identity) в DCOM

Рассмотрим самый быстрый способ исправления ситуации, который подтвердил свою эффективность на практике. Нам необходимо заставить Windows запускать COM-объект в фиксированном контексте, не зависящем от того, кто залогинен на сервере.

  1. Нажмем Win + R и введем команду dcomcnfg для открытия оснастки «Службы компонентов».
  2. Перейдем по пути: «Службы компонентов» — «Компьютеры» — «Мой компьютер» — «Настройка DCOM».
  3. Найдем в списке компонент V83.COMConnector (или V82.COMConnector, в зависимости от версии платформы).
  4. Нажмем правой кнопкой мыши и выберем «Свойства».
  5. Перейдем на вкладку «Удостоверение» (Identity).
  6. Вместо варианта «Интерактивный пользователь» выберем пункт «Указанный пользователь».
  7. Укажем данные учетной записи, от имени которой работает служба сервера 1С (обычно это userv81c или специально созданная сервисная учетная запись).

Важный нюанс: После этого изменения COM-объект будет всегда запускаться в контексте указанного пользователя, и его работоспособность не будет зависеть от наличия активных RDP-сессий.

Решение 2: Создание обертки COM+ (наиболее стабильный вариант)

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

  1. В той же оснастке dcomcnfg перейдем в ветку «Приложения COM+».
  2. Создадим новое приложение: правой кнопкой — «Создать» — «Приложение». Выберем «Создать новое приложение», дадим ему понятное имя (например, 1C_COM_Connector) и установим тип «Серверное приложение».
  3. В качестве учетной записи для запуска укажем нашего сервисного пользователя (как в Решении 1).
  4. Внутри созданного приложения перейдем в папку «Компоненты», нажмем «Создать» — «Компонент».
  5. Выберем «Установка новых компонентов» и найдем файл comcntr.dll в папке установки платформы 1С (например, C:\Program Files\1cv8\8.3.X.X\bin\comcntr.dll).

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

Решение 3: Создание системных папок Desktop

Проанализируем еще одну специфическую причину. Иногда COM-объекты 1С требуют инициализации некоторых подсистем Windows, которые жестко завязаны на наличие папки рабочего стола в профиле. Если сервис работает под системной учетной записью (System), этих папок может не быть по умолчанию.

Посмотрим, как это исправить. Необходимо вручную создать директории:

После создания папок убедимся, что у пользователя, под которым запускается COM (наш сервисный аккаунт), есть полные права доступа к этим папкам. Это часто лечит «необъяснимые» падения при отсутствии активных сессий.

Решение 4: Настройка групповых политик (GPO) для профилей

Если вышеуказанные меры не помогают, проверим настройки политики выгрузки профилей. Рассмотрим, как запретить Windows принудительно закрывать реестр пользователя.

  1. Откроем редактор локальной групповой политики gpedit.msc.
  2. Перейдем в раздел: «Конфигурация компьютера» — «Административные шаблоны» — «Система» — «Профили пользователей».
  3. Найдем параметр «Не выгружать принудительно реестр пользователя при его выходе из системы».
  4. Установим значение «Включено».

Это предотвратит ситуацию, когда операционная система обрывает связи 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.

← На главную