Ситуация, когда на одном мощном терминальном сервере работают десятки разработчиков под одной и той же учетной записью 1С (например, Администратор), является классической головной болью для системных администраторов и ведущих разработчиков. Стандартная консоль кластера 1С в этом случае показывает лишь имя пользователя базы данных и сетевое имя сервера, которое для всех RDP-сессий будет одинаковым. В результате становится невозможно понять, кто именно занял конфигуратор конкретной базы и почему процесс 1cv8.exe потребляет аномально много ресурсов.
В этой статье мы подробно разберем, как связать процесс операционной системы, пользователя терминала и конкретную базу данных 1С, используя системные инструменты и особенности работы платформы.
Если разработка ведется в файловых базах, то это самый надежный и быстрый способ. Каждый запущенный экземпляр Конфигуратора обязан держать открытым основной файл базы данных или файлы блокировок. Проанализируем, как это можно использовать.
Процесс 1cv8.exe при подключении к файловой базе обращается к файлу 1Cv8.1CD. Мы можем использовать системную утилиту handle.exe или штатный «Монитор ресурсов» Windows. Разберем алгоритм действий:
1cv8.exe и отметим его галочкой.Среди множества библиотек мы найдем строку, указывающую на путь к базе данных. Зная 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 файлов
}
Часто в параметрах запуска процесса 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).
Выясним причину, почему 1С иногда скрывает явные пути. При запуске любой базы платформа создает папку кэша в %LOCALAPPDATA%\1C\1cv8\. Название этой папки соответствует ID из файла ibases.v8i.
Если мы видим, что процесс активно пишет в папку .../1C/1cv8/b8bc06f9-a67c-4315-9449-72f927b68432, мы можем гарантировать, что запущена база, имеющая именно этот ID. Сопоставив этот ID со списком баз пользователя, мы снова получаем искомый результат.
Рассмотрим ситуацию, когда баз очень много. Можно воспользоваться тем, что конфигуратор при работе создает временные файлы и блокировки. Анализ активности в папке %TEMP% пользователя также может подсказать, над какой конфигурацией идет работа в данный момент.
Для серверных баз ситуация сложнее, так как процесс 1cv8.exe не открывает файлы базы напрямую, а общается с процессом rphost на сервере 1С. Однако здесь нам на помощь приходит анализ сетевой активности.
Разберем этот метод по шагам:
1cv8.exe для связи с сервером 1С. Это можно сделать командой netstat -ano | findstr [PID].Information Base) подключен данный сеанс.Этот метод требует прав администратора на кластере 1С, но он является самым «чистым» с точки зрения системного анализа.
Посмотрим на пример того, как сама 1С фиксирует вход пользователя. Начиная с последних релизов платформы 8.3, в Журнале Регистрации при событии Сеанс. Аутентификация фиксируется дополнительная информация.
Хотя поле «Компьютер» покажет имя терминального сервера, время входа в журнал регистрации с точностью до секунды совпадает со временем создания процесса 1cv8.exe в операционной системе. Если мы сопоставим время запуска процесса из WMI и время записи в журнале регистрации базы данных, мы сможем с высокой долей вероятности вычислить пользователя.
Пример запроса через WMI для получения времени запуска процесса:
wmic process where "name='1cv8.exe'" get caption, creationdate, processid /format:list
Полученную дату CreationDate (в формате ГГГГММДДЧЧММСС) сравниваем с записями в ЖР всех подозрительных баз. Тот факт, что в ЖР указано «Приложение: Конфигуратор», значительно сужает круг поиска.
Для эффективного мониторинга мы рекомендуем комбинированный подход:
Process Explorer, чтобы увидеть командную строку запуска и владельца процесса.PowerShell, который сканирует ibases.v8i в папках всех пользователей в C:\Users\ и сопоставляет их с активными процессами 1cv8.exe по ключу /IBName.Важный момент: если вы столкнулись с тем, что разработчики часто мешают друг другу, лучшим решением будет все же административное — обязать каждого заходить под своим персональным пользователем 1С даже в клиентские базы. Это снимет все вопросы мониторинга штатными средствами платформы.