Как запустить RDP-подключение из 1С с передачей логина и пароля

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

При автоматизации рабочих процессов часто возникает необходимость организовать бесшовный переход из интерфейса 1С к удаленному рабочему столу (RDP) конкретного сервера. Стандартная команда ЗапуститьПриложение с использованием системного клиента mstsc.exe позволяет легко открыть окно подключения, однако разработчики сразу сталкиваются с серьезным ограничением: штатный клиент Microsoft RDP не поддерживает передачу пароля напрямую через параметры командной строки из соображений безопасности.

В этой статье мы подробно разберем несколько проверенных способов решения этой задачи: от использования системных механизмов Windows до внедрения сторонних утилит и специализированных ActiveX-компонентов.

Метод 1: Использование системной утилиты cmdkey

Проанализируем наиболее эффективный способ, не требующий установки стороннего программного обеспечения. Этот метод основан на предварительном занесении учетных данных в «Диспетчер учетных данных Windows» (Windows Vault) с помощью встроенной утилиты cmdkey. После того как данные будут сохранены в системе, стандартный клиент mstsc.exe подхватит их автоматически при запуске сессии к указанному адресу.

Рассмотрим алгоритм реализации на языке 1С:


// Определяем параметры подключения
Сервер   = "192.168.1.100";
Логин    = "Администратор";
Пароль   = "SuperPassword123";

// Шаг 1: Добавляем учетные данные в хранилище Windows
КомандаДобавления = "cmdkey /add:" + Сервер + " /user:" + Логин + " /pass:" + Пароль;
ЗапуститьПриложение(КомандаДобавления, , Истина);

// Шаг 2: Запускаем RDP-клиент
КомандаЗапуска = "mstsc.exe /v:" + Сервер;
ЗапуститьПриложение(КомандаЗапуска);

// Шаг 3 (опционально): Очистка данных после запуска
// Внимание: если удалить данные сразу, mstsc может не успеть их считать.
// Рекомендуется выполнять очистку при закрытии формы или через небольшую паузу.
// КомандаУдаления = "cmdkey /delete:" + Сервер;
// ЗапуститьПриложение(КомандаУдаления, , Истина);

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

Метод 2: Работа с динамическими RDP-файлами

Выясним, как использовать конфигурационные файлы .rdp. В сообщениях форума часто советуют просто прописать параметры в файл, но здесь есть техническая сложность: поле password 51:b:HASH содержит зашифрованный хеш пароля, который привязан к текущему пользователю Windows и конкретному компьютеру (используется DPAPI).

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

  1. Создадим «эталонный» RDP-файл, в котором настроены все параметры (разрешение экрана, проброс дисков, звука).
  2. В коде 1С будем считывать этот файл как текстовый и динамически менять строку адреса сервера (параметр full address:s:).
  3. Для автоматического ввода пароля этим методом нам все равно придется либо использовать cmdkey (как в методе 1), либо предварительно один раз сохранить пароль в файл вручную на каждом рабочем месте пользователя.

Пример изменения адреса в файле программно:


ПутьКФайлу = "C:\RDP\template.rdp";
ТекстФайла = Новый ТекстовыйДокумент;
ТекстФайла.Прочитать(ПутьКФайлу);

Для НомерСтроки = 1 По ТекстФайла.КоличествоСтрок() Цикл
    Строка = ТекстФайла.ПолучитьСтроку(НомерСтроки);
    Если Найти(Строка, "full address:s:") > 0 Тогда
        ТекстФайла.ЗаменитьСтроку(НомерСтроки, "full address:s:новый_сервер_1c.ru");
    КонецЕсли;
КонецЦикла;

ТекстФайла.Записать("C:\Temp\current_session.rdp");
ЗапуститьПриложение("mstsc.exe ""C:\Temp\current_session.rdp""");

Метод 3: Использование стороннего клиента FreeRDP

Если штатные средства Windows кажутся слишком ограниченными, рассмотрим использование альтернативного клиента с открытым исходным кодом — FreeRDP (в частности, его версию для Windows — wfreerdp.exe). Это решение позволяет передавать логин и пароль напрямую в командной строке.

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


// Параметры: /f - полноэкранный режим, /v - адрес сервера, /u - пользователь, /p - пароль
ПутьКПрограмме = "C:\FreeRDP\wfreerdp.exe";
ПараметрыЗапуска = "/f /v:172.16.0.5 /u:Administrator /p:MyPassword";

ЗапуститьПриложение(ПутьКПрограмме + " " + ПараметрыЗапуска);

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

Метод 4: Встраивание RDP-клиента в форму 1С через ActiveX

Для создания максимально интегрированного интерфейса разберем возможность встраивания окна терминала прямо в форму 1С. Это делается с помощью объекта MsRdpClient (Microsoft RDP Client Control). Этот метод позволяет программно задавать пароль в открытом виде (через свойство ClearTextPassword), который будет использоваться только для текущей сессии в оперативной памяти.

Алгоритм реализации в толстом клиенте или через ActiveX-объект:

  1. Добавим на форму 1С элемент управления «Поле ActiveX».
  2. Выберем тип объекта: Microsoft RDP Client Control (версии 7 и выше).
  3. В коде инициализации пропишем параметры.

// Пример инициализации объекта на форме
ЭлементRDP = Элементы.RDPControl; // Это наше поле ActiveX
ЭлементRDP.Server = "10.0.0.1";
ЭлементRDP.UserName = "Login1C";

// Настройка расширенных параметров для ввода пароля
AdvancedSettings = ЭлементRDP.AdvancedSettings7;
AdvancedSettings.ClearTextPassword = "MySecretPassword";

// Дополнительные настройки безопасности
ЭлементRDP.NegotiateSecurityLayer = Истина;

// Запуск подключения
ЭлементRDP.Connect();

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

Сводная таблица и рекомендации

Проанализировав все способы, подведем итог:

Выясним причину возможных ошибок: если при использовании любого из методов сервер выдает ошибку авторизации при правильном пароле, проверьте настройки NLA (Network Level Authentication). В современных системах NLA требует передачи учетных данных до установления основного соединения, что лучше всего обрабатывается методами 1 и 3.

← На главную