Обнаружение интерактивных сервисов, показываемое при открытии приложения на удаленном сервере (JSCH)

У меня работает SSH-сервер, и мне нужно закрыть и открыть приложение JavaFX. Используя freeSSHd и JSch, я смог закрыть приложение, используя:

sendCommand("wmic Path win32_process Where \"CommandLine Like '%Test.jar%'\" Call Terminate");

Команда выше закрывает приложение без проблем.

Когда мне нужно снова запустить приложение, я пытаюсь использовать:

sendCommand("cmd /c cd C:/Test/dist && java -jar Test.jar");

В результате открывается окно Interactive Services Detection с сообщением: "Программа, запущенная на этом компьютере, пытается отобразить сообщение". Открытие сообщения показывает приложение JavaFX.

Мне нужно открыть приложение JavaFX непосредственно на удаленном компьютере, но это не отображается. Это нормальное поведение? Могу ли я достичь этого с помощью SSH (JSch)? Я знаю, что PSExec является альтернативой, но он должен быть установлен на каждом клиентском компьютере.

То же самое происходит, когда я пытаюсь выполнить команду в консоли PuTTY.

Я думаю, что это связано с "Session 0 Isolation", но я не знаю, что это значит.

1 ответ

Решение

Обычно (SSH) серверы работают как служба Windows.

Оконные службы запускаются в отдельном сеансе Windows (Google для "изоляции сеанса 0"). Они не могут получить доступ к интерактивным (пользовательским) сеансам Windows.

Дело не в том, что "Обнаружение интерактивных сервисов" блокирует приложение. Это наоборот. Это служба "Interactive Services Detection", которая обнаруживает, что служба пытается отобразить графический интерфейс в невидимом сеансе 0, и позволяет вам реплицировать графический интерфейс в пользовательском сеансе.

Также обратите внимание, что в Windows может быть несколько пользовательских сессий (несколько зарегистрированных пользователей). Как сервер SSH узнает, в каком пользовательском сеансе отображается графический интерфейс (даже если это возможно)? Я предполагаю (хотя это всего лишь предположение), что "Обнаружение интерактивных сервисов" показывает приглашение на всех сеансах пользователя, и первый пользователь, который принимает приглашение, выигрывает графический интерфейс.


Вы можете запустить сервер SSH в интерактивном сеансе Windows вместо службы. Это имеет свои ограничения, хотя. На самом деле FreeSSHD при установке спрашивает вас, хотите ли вы установить его как сервис или нет.

Хотя я не рекомендую вам использовать FreeSSHd вообще. Это довольно глючит и не в хорошем состоянии.


В общем, все это (запуск приложения с графическим интерфейсом в Windows удаленно через SSH) не кажется мне хорошей идеей.

Другие вопросы по тегам