Обнаружение интерактивных сервисов, показываемое при открытии приложения на удаленном сервере (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) не кажется мне хорошей идеей.