В практике системного администрирования 1С часто возникает задача ограничить рабочее пространство пользователя терминального сервера. Для повышения безопасности и удобства администраторы отключают стандартный рабочий стол Windows и панель задач, оставляя пользователю только возможность работы с программой. Однако здесь возникает техническая сложность: стандартный загрузчик 1CEStart.exe после выбора информационной базы запускает основной процесс платформы и завершается. В режиме удаленного приложения (RemoteApp) это часто приводит к тому, что операционная система считает сеанс завершенным и закрывает соединение, не давая пользователю запустить вторую или третью базу. Рассмотрим подробно, как решить эту проблему различными методами.
Наиболее современным и правильным подходом является использование технологии RemoteApp. Вместо того чтобы предоставлять пользователю весь рабочий стол, мы публикуем 1С как отдельное окно, которое для пользователя выглядит так, будто оно запущено локально. Разберем, как это работает в контексте нашей проблемы:
1CEStart.exe, пользователь увидит привычный список баз. При запуске второй базы через этот же ярлык, Windows Server автоматически перенаправит запрос в уже существующую терминальную сессию пользователя, открывая второе окно 1С.HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\RemoteApp параметр LogoffDelay определяет задержку перед закрытием сессии после завершения последнего приложения.Если нам нужно, чтобы пользователь мог запускать конкретные базы в обход общего списка, мы можем создать отдельные ярлыки для каждой базы. Для этого используются параметры командной строки 1С. Выясним основные ключи, которые нам понадобятся:
/F — путь к файловой базе данных./S — адрес серверной базы (Кластер\ИмяБазы)./N — имя пользователя в 1С./P — пароль пользователя.Посмотрим на пример команды для запуска конкретной базы:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "Server1C\Accounting" /N "Manager" /P "Password123"
Используя такие ярлыки, пользователь сможет запускать несколько экземпляров 1С одновременно. Каждое новое окно будет открываться в рамках одной и той же терминальной сессии, что экономит ресурсы сервера и лицензии.
Когда стандартных средств недостаточно, мы можем создать собственный скрипт, который будет выступать в роли меню для пользователя. Этот скрипт запускается вместо оболочки Windows (Explorer.exe) или как основное приложение RemoteApp. Рассмотрим преимущества такого подхода:
Разберем пример простейшего скрипта на VBScript, который может служить оболочкой:
Set WshShell = CreateObject("WScript.Shell")
' Запускаем 1С и ждем выбора базы, но сам скрипт не закрываем
Do
Return = WshShell.Run("""C:\Program Files\1cv8\common\1cestart.exe""", 1, True)
' Если нужно запретить пользователю закрывать скрипт до конца смены:
Msg = MsgBox("Завершить работу с 1С и выйти из системы?", 36, "Завершение сеанса")
If Msg = 6 Then Exit Do
Loop
Для системного администратора важно не настраивать список баз каждому пользователю вручную. Мы можем использовать файл 1CEStart.cfg для подключения общих списков баз (файлы .v8i). Проанализируем структуру этого процесса:
%AppData%\1C\1CEstart пользователя или в общей папке с программой находим 1CEStart.cfg.CommonCfgLocation=\\Server\Share\common_bases.v8i..v8i прописываем настройки баз.При таком подходе, запустив опубликованный 1CEStart.exe, пользователь всегда будет видеть актуальный список баз, а при выборе любой из них сессия останется активной благодаря механизмам RemoteApp.
Одной из главных проблем при отсутствии рабочего стола является переключение между окнами. Если пользователь запустил три разные базы 1С, он может «потерять» одно из окон за другим. Проанализируем способы решения этой ситуации:
Alt+Tab в RDP-сессии часто переключает окна на локальном компьютере. Для переключения между окнами внутри удаленной сессии следует использовать Alt+PageUp и Alt+PageDown.Taskbar для RemoteApp), которые запускаются вместе с 1С и отображают только запущенные окна текущей сессии.Для реализации возможности старта нескольких баз в «бесшосном» режиме наиболее эффективным является сочетание RemoteApp и настройки CommonCfgLocation. Это позволяет сохранить привычный интерфейс выбора баз 1С, обеспечивая при этом стабильность терминальной сессии. Если же требуется максимально жесткий контроль, рекомендуется использование скриптовой оболочки, которая будет явно управлять жизненным циклом сеанса пользователя.