Как принудительно завершить сеансы 1С, зависшие на этапе авторизации, для обслуживания файловой базы?

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

Работа с файловыми базами данных «1С:Предприятие 8» накладывает существенные ограничения на административное обслуживание. Одной из наиболее острых проблем является невозможность получения монопольного доступа для выполнения таких операций, как создание резервных копий, тестирование и исправление или обновление конфигурации. Часто это происходит из-за «забытых» сеансов пользователей.

Особенность платформы 1С заключается в том, что файл блокировки 1Cv8.lcl создается операционной системой сразу после запуска исполняемого файла 1cv8.exe и выбора информационной базы, еще до момента ввода логина и пароля. Если пользователь открыл окно авторизации и ушел, или если процесс «завис» на заставке (splash-screen), стандартные механизмы блокировки сеансов через консоль кластера (которая отсутствует в файловом варианте) или через параметры конфигурации не сработают. Разберем, как автоматизировать решение этой задачи.

Анализ проблемы блокировки файловых ресурсов

Проанализируем ситуацию: когда запускается клиентское приложение, оно открывает основной файл базы данных 1Cv8.1CD. Даже если пользователь не ввел пароль, процесс уже удерживает дескрипторы файлов. В операционных системах семейства Windows это предотвращает любые действия, требующие монопольного захвата файла другим процессом. Выгнать такого пользователя «штатными» средствами 1С невозможно, так как сеанс в понимании платформы еще не создан.

Рассмотрим основные сценарии, которые мешают обслуживанию:

  1. Окно авторизации: Пользователь запустил 1С, увидел окно выбора пользователя и отошел от компьютера.
  2. Зависшая заставка: Процесс 1cv8.exe запущен, висит заставка, но база не открывается из-за сетевых проблем или ошибок кэша.
  3. Окно сравнения конфигураций: При запуске после обновления появилось служебное окно о несоответствии версий, которое также блокирует базу.

Механизм работы специализированной утилиты-киллера

Для решения описанных проблем разработана программа «KillerOfUnwantedWindows1C». Она работает в фоновом режиме на стороне клиента (или на терминальном сервере) и отслеживает состояние окон 1С. Выясним, как именно программа определяет, какое окно следует закрыть.

Программа использует функции WinAPI для анализа оконных процессов. Основная логика заключается в идентификации окон по их классу (например, V8TopLevelFrame) и заголовкам. Рассмотрим алгоритм подробнее:

Во-первых, система должна отличить активного пользователя от «забытого» окна. Для этого используется функция GetLastInputInfo. Она позволяет получить время последнего действия пользователя в операционной системе (движение мыши или нажатие клавиш). Если время бездействия превышает заданный порог (например, 120 секунд), программа переходит к анализу окон 1С.

Во-вторых, программа разделяет действия в зависимости от типа «зависшего» элемента. Если обнаружено окно авторизации, применяется «мягкое» закрытие. Проанализируем пример логики на языке C#, который используется в подобных инструментах:


// Отправка сообщения о закрытии окна авторизации
SendMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);

В-третьих, если процесс 1С обнаружен, но само окно не отвечает или находится в состоянии загрузки (splash-screen) дольше установленного лимита (например, 10 минут), программа применяет принудительное завершение процесса. Посмотрим на реализацию завершения процесса по его идентификатору:


var process = Process.GetProcessById(targetProcessId);
// Принудительное уничтожение процесса, если он мешает доступу к базе
process.Kill();

Безопасность данных при принудительном завершении

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

Однако стоит учитывать влияние на Журнал регистрации. При жестком завершении процесса (через TerminateProcess) записи в журнале (файлы .lgp или .lgf), которые могли инициироваться платформой при попытке входа, могут не успеть сброситься на диск. Но для задач администрирования это является допустимым компромиссом по сравнению с невозможностью сделать бэкап всей базы.

Развертывание в терминальной среде и на рабочих станциях

Рассмотрим, как правильно организовать работу программы в зависимости от топологии вашей сети:

  1. Терминальный сервер (RDP): Это самый эффективный сценарий. Программа устанавливается один раз на сервер и контролирует сессии всех пользователей. Администратору достаточно настроить один конфигурационный файл.
  2. Локальная сеть (Fat/Thin Client): Программу необходимо установить на каждый компьютер, где работают пользователи. В этом случае удобно использовать MSI-пакет для развертывания через групповые политики (GPO) контроллера домена.

Проанализируем настройки по умолчанию. Обычно программа настроена на 120 секунд ожидания в окне авторизации. Этого достаточно, чтобы пользователь успел вспомнить пароль, но в то же время позволяет оперативно освободить базу, если сотрудник ушел на обед, оставив окно открытым.

Интеграция с инструментами обслуживания

Посмотрим на сценарий совместного использования с популярными инструментами автоматизации, такими как «Обновлятор-1С». Хотя «Обновлятор» имеет свои механизмы выдворения пользователей, они часто пасуют перед окнами авторизации в файловых базах. В связке с «Киллером нежелательных окон» процесс автоматизации становится практически безупречным: «Киллер» зачищает зависшие окна авторизации, а основной инструмент обслуживания спокойно блокирует базу и выполняет регламентные задания.

Важно помнить, что программа не трогает окна браузеров при работе через веб-клиент. Это логично, так как в случае веб-сервера блокировку файлов осуществляет процесс веб-сервера (например, w3wp.exe или httpd.exe), и администратор может управлять ими централизованно на стороне сервера.

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

← На главную