Почему 1С создает множество процессов с именами вида v8_XXXX_XXX.exe и как это исправить?

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

При администрировании сервера приложений 1С:Предприятие 8.3 можно столкнуться с ситуацией, когда в диспетчере задач или системном мониторе внезапно появляется несколько десятков однотипных процессов с маской имени v8_XXXX_XXX.exe, где вместо X указаны шестнадцатеричные символы. На первый взгляд такое поведение операционной системы часто принимают за вирусную атаку или внедрение вредоносного трояна в дистрибутив платформы. Однако проанализируем реальные механизмы работы платформы 1С и выясним истинную причину появления подобных процессов.

Механизм генерации имен временных файлов платформой 1С

Рассмотрим, откуда берутся файлы с подобными именами. В платформе 1С:Предприятие встроен метод встроенного языка ПолучитьИмяВременногоФайла(). Если передать ему расширение exe, платформа генерирует путь к файлу во временной папке пользователя операционной системы (или во временном каталоге службы сервера 1С) по строгому шаблону:

  1. Префикс имени: всегда v8_.
  2. Первый блок символов: шестнадцатеричный идентификатор (PID) процесса 1С (клиентского приложения 1cv8.exe или рабочего процесса кластера rphost.exe), в контексте которого был выполнен вызов.
  3. Второй блок символов: порядковый шестнадцатеричный номер временного файла, сгенерированного текущим процессом с момента его старта.
  4. Расширение файла: указанное расширение, в данном случае .exe.

Таким образом, появление процессов с именами вида v8_XXXX_XXX.exe напрямую говорит о том, что прикладной код конфигурации, внешняя обработка или регламентное задание извлекает из двоичных данных (например, из макета конфигурации) исполняемый файл, сохраняет его во временный каталог с уникальным именем и запускает через метод ЗапуститьПриложение или через объекты операционной системы (такие как WScript.Shell).

Почему процессы накапливаются и зависают?

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

  1. Изоляция сессий Windows (Session 0 Isolation): Службы сервера 1С (процессы ragent.exe, rmngr.exe, rphost.exe) и выполняемые ими фоновые/регламентные задания работают в изолированной нулевой сессии Windows, где графический интерфейс пользователя полностью заблокирован. Если вызываемая утилита пытается вывести диалоговое окно (например, предупреждение, запрос лицензии, окно ошибки или окно ввода параметров), процесс не может показать окно на экране и навсегда «зависает» в ожидании реакции пользователя.
  2. Частый запуск по расписанию без ожидания завершения: Регламентное задание может быть настроено на запуск с коротким интервалом (например, каждую минуту). Если в коде запуск внешнего приложения инициируется асинхронно без флага ожидания завершения, а предыдущая копия утилиты еще не закончила обработку, при каждом новом срабатывании задания создается и запускается очередной файл с новым шестнадцатеричным именем.
  3. Переполнение буферов вывода (stdout/stderr): Если утилита является консольной и активно выводит лог работы в стандартный поток, но при этом вызывающий код 1С или системный скрипт не вычитывает поток вывода, буфер операционной системы переполняется, и процесс блокируется.
  4. Блокировка средствами безопасности: Антивирусные средства, EDR-системы или политики ограниченного использования программ (SRP, AppLocker) могут блокировать или приостанавливать исполнение любых файлов .exe, запускаемых непосредственно из системных каталогов %TEMP%. В результате процесс «зависает» на этапе проверки.

Диагностика источника запуска

Выясним по шагам, какая именно функциональность или внешняя обработка порождает зависшие процессы:

  1. Анализ PID родительского процесса по имени файла: Переведем первый шестнадцатеричный блок имени файла (например, 1A4C из v8_1a4c_001.exe) в десятичную систему счисления с помощью стандартного калькулятора программиста. Полученное число — это точный идентификатор процесса (PID) rphost.exe или 1cv8.exe, из которого был инициирован запуск.
  2. Исследование через Process Explorer: Запустим системную утилиту Process Explorer от Microsoft Sysinternals. Найдем в дереве процессов зависший процесс v8_XXXX_XXX.exe. Откроем его свойства и посмотрим на поле Command Line (командная строка запуска) — в нем будут видны переданные аргументы, ключи и пути, что сразу укажет на конкретную прикладную задачу (например, утилита архивации, криптографическая утилита, конвертер файлов или драйвер торгового оборудования).
  3. Проверка самого исполняемого файла: Перейдем во временный каталог (папка пользователя службы сервера 1С, например C:\Windows\Temp или C:\Users\usr1cv8\AppData\Local\Temp). Скопируем зависший .exe-файл в отдельную папку и посмотрим его свойства (вкладка «Подробно»), чтобы определить разработчика, оригинальное имя файла и версию программы.
  4. Глобальный поиск по коду конфигурации: Выполним в конфигураторе глобальный поиск по ключевым словам: ПолучитьИмяВременногоФайла("exe"), ПолучитьИмяВременногоФайла(".exe"), а также по методу ЗапуститьПриложение. Обратим особое внимание на код во внешних обработках и расширениях, подключенных к базе.

Способы устранения проблемы

Рассмотрим, как правильно организовать работу с внешними утилитами, чтобы исключить утечки процессов и зависание сервера.

1. Отказ от динамической распаковки бинарников во временные папки:

Не следует извлекать исполняемый файл из двоичных данных в папку Temp при каждом вызове. Рекомендуется установить необходимую утилиту стационарно в выделенный каталог на сервере (например, C:\Program Files\UtilityName\) с разграниченными правами доступа и обращаться к ней по постоянному пути. Это исключит постоянное создание файлов с уникальными именами и снизит подозрительность со стороны антивирусов.

2. Корректные параметры запуска в фоновых заданиях:

Если запуск сторонней консольной утилиты неизбежен, проанализируем правила его корректной настройки в коде 1С:

  1. Всегда запускать консольную утилиту с ключами «тихого» пакетного режима (например, --silent, -batch, /q), исключающими любые графические окна и интерактивные подсказки.
  2. Использовать параметр синхронного ожидания завершения процесса в методе ЗапуститьПриложение.
  3. Обязательно очищать временные файлы после выполнения операции, используя метод УдалитьФайлы в блоке Попытка ... Исключение.

Посмотрим на пример корректного вызова внешнего приложения с ожиданием завершения:


КомандаЗапуска = Строка(ПутьКУтилите) + " --silent --input=""" + ПутьКВходномуФайлу + """";
КодВозврата = 0;

// Третий параметр (Истина) указывает на ожидание завершения работы запущенного процесса
ЗапуститьПриложение(КомандаЗапуска, , Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
    ЗаписьЖурналаРегистрации("ВыполнениеВнешнейУтилиты", УровеньЖурналаРегистрации.Ошибка, , , 
        "Процесс завершился с ошибкой. Код: " + Строка(КодВозврата));
КонецЕсли;

3. Использование штатных объектов платформы вместо внешних .exe:

Многие задачи, для которых ранее программисты использовали внешние консольные утилиты, в современных версиях платформы 1С:Предприятие 8.3 решаются встроенными средствами:

  1. Работа с архивами: Вместо внешних архиваторов (таких как 7-Zip, WinRAR) используем встроенные платформенные объекты ЗаписьZipФайла и ЧтениеZipФайла.
  2. Сетевые протоколы и API: Вместо утилит вроде curl или wget используем объект HTTPСоединение и связанные с ним классы HTTPЗапрос и HTTPОтвет.
  3. Электронная подпись и шифрование: Вместо вызова консольных криптопровайдеров применяем встроенный объект МенеджерКриптографии.

4. Настройка профилей безопасности кластера:

Для предотвращения неконтролируемого запуска исполняемых файлов на стороне сервера 1С рекомендуется включить профили безопасности в свойствах информационной базы. Профиль безопасности позволяет явно запретить запуск внешних программ операционной системы либо строго ограничить список разрешенных исполняемых файлов доверенными системными путями.

← На главную