Как определить, какой пользователь RDP работает в конкретной базе 1С через Конфигуратор?

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

Ситуация, когда на одном мощном терминальном сервере работают десятки разработчиков под одной и той же учетной записью 1С (например, Администратор), является классической головной болью для системных администраторов и ведущих разработчиков. Стандартная консоль кластера 1С в этом случае показывает лишь имя пользователя базы данных и сетевое имя сервера, которое для всех RDP-сессий будет одинаковым. В результате становится невозможно понять, кто именно занял конфигуратор конкретной базы и почему процесс 1cv8.exe потребляет аномально много ресурсов.

В этой статье мы подробно разберем, как связать процесс операционной системы, пользователя терминала и конкретную базу данных 1С, используя системные инструменты и особенности работы платформы.

Метод 1. Анализ файловых дескрипторов (для файловых баз)

Если разработка ведется в файловых базах, то это самый надежный и быстрый способ. Каждый запущенный экземпляр Конфигуратора обязан держать открытым основной файл базы данных или файлы блокировок. Проанализируем, как это можно использовать.

Процесс 1cv8.exe при подключении к файловой базе обращается к файлу 1Cv8.1CD. Мы можем использовать системную утилиту handle.exe или штатный «Монитор ресурсов» Windows. Разберем алгоритм действий:

  1. Откроем Монитор ресурсов (resmon.exe).
  2. Перейдем на вкладку ЦП.
  3. В списке процессов найдем интересующий нас 1cv8.exe и отметим его галочкой.
  4. В нижней панели Связанные дескрипторы мы увидим все пути к файлам, которые открыл этот процесс.

Среди множества библиотек мы найдем строку, указывающую на путь к базе данных. Зная PID (идентификатор процесса) и владельца процесса (поле Пользователь в диспетчере задач), мы получаем однозначную связку: Пользователь ОС -> PID -> Путь к базе.

Для автоматизации этого процесса на PowerShell можно использовать следующий подход:


$Processes = Get-Process 1cv8
foreach ($Proc in $Processes) {
    $Owner = (Get-WmiObject -Query "Select * from Win32_Process Where ProcessId = $($Proc.Id)").GetOwner().User
    Write-Host "Process ID: $($Proc.Id), User: $Owner"
    # Здесь можно вызвать handle.exe для поиска открытых .1CD файлов
}

Метод 2. Сопоставление через файл описания баз ibases.v8i

Часто в параметрах запуска процесса 1С (командной строке) передается не прямой путь к базе, а имя базы из списка: /IBName "ИмяБазы". Платформа 1С хранит эти списки в файле ibases.v8i в профиле каждого пользователя. Рассмотрим, как сопоставить эти данные.

Файл находится по пути: %APPDATA%\1C\1CEStart\ibases.v8i. Если мы знаем, под каким пользователем запущен процесс 1cv8.exe, мы можем прочитать его личный файл настроек и найти там расшифровку подключения.

Проанализируем структуру типичного блока в этом файле:


[Название базы в списке]
Connect=Srvr="Server1C";Ref="Base_Production";
ID=b8bc06f9-a67c-4315-9449-72f927b68432
OrderInList=16384
Folder=/

Если в командной строке процесса (которую можно увидеть в Диспетчере задач на вкладке «Подробности» или через wmic process get caption, commandline) указано /IBName "Название базы в списке", нам достаточно найти этот заголовок в ibases.v8i конкретного пользователя и прочитать строку Connect. Там будет указано имя базы в кластере (параметр Ref).

Метод 3. Использование кэша и уникальных идентификаторов (GUID)

Выясним причину, почему 1С иногда скрывает явные пути. При запуске любой базы платформа создает папку кэша в %LOCALAPPDATA%\1C\1cv8\. Название этой папки соответствует ID из файла ibases.v8i.

Если мы видим, что процесс активно пишет в папку .../1C/1cv8/b8bc06f9-a67c-4315-9449-72f927b68432, мы можем гарантировать, что запущена база, имеющая именно этот ID. Сопоставив этот ID со списком баз пользователя, мы снова получаем искомый результат.

Рассмотрим ситуацию, когда баз очень много. Можно воспользоваться тем, что конфигуратор при работе создает временные файлы и блокировки. Анализ активности в папке %TEMP% пользователя также может подсказать, над какой конфигурацией идет работа в данный момент.

Метод 4. Анализ сетевых соединений (для клиент-серверных баз)

Для серверных баз ситуация сложнее, так как процесс 1cv8.exe не открывает файлы базы напрямую, а общается с процессом rphost на сервере 1С. Однако здесь нам на помощь приходит анализ сетевой активности.

Разберем этот метод по шагам:

  1. Выясним локальный порт, который использует конкретный PID процесса 1cv8.exe для связи с сервером 1С. Это можно сделать командой netstat -ano | findstr [PID].
  2. Запомним порт (например, 54321) и IP-адрес сервера 1С.
  3. На сервере 1С (или через консоль администрирования) проанализируем список текущих соединений. В свойствах соединения в кластере 1С отображается «Порт рабочего процесса» или IP-адрес и порт клиента.
  4. Сопоставив уникальный исходящий порт терминальной сессии с входящим портом в консоли кластера, мы точно определим, к какой базе (Information Base) подключен данный сеанс.

Этот метод требует прав администратора на кластере 1С, но он является самым «чистым» с точки зрения системного анализа.

Метод 5. Журнал регистрации и события аутентификации

Посмотрим на пример того, как сама 1С фиксирует вход пользователя. Начиная с последних релизов платформы 8.3, в Журнале Регистрации при событии Сеанс. Аутентификация фиксируется дополнительная информация.

Хотя поле «Компьютер» покажет имя терминального сервера, время входа в журнал регистрации с точностью до секунды совпадает со временем создания процесса 1cv8.exe в операционной системе. Если мы сопоставим время запуска процесса из WMI и время записи в журнале регистрации базы данных, мы сможем с высокой долей вероятности вычислить пользователя.

Пример запроса через WMI для получения времени запуска процесса:


wmic process where "name='1cv8.exe'" get caption, creationdate, processid /format:list

Полученную дату CreationDate (в формате ГГГГММДДЧЧММСС) сравниваем с записями в ЖР всех подозрительных баз. Тот факт, что в ЖР указано «Приложение: Конфигуратор», значительно сужает круг поиска.

Резюме и рекомендации

Для эффективного мониторинга мы рекомендуем комбинированный подход:

Важный момент: если вы столкнулись с тем, что разработчики часто мешают друг другу, лучшим решением будет все же административное — обязать каждого заходить под своим персональным пользователем 1С даже в клиентские базы. Это снимет все вопросы мониторинга штатными средствами платформы.

← На главную