Java 在远程服务器(JSch)上打开应用程序时显示的交互式服务检测

Java 在远程服务器(JSch)上打开应用程序时显示的交互式服务检测,java,ssh,remote-access,jsch,session-0-isolation,Java,Ssh,Remote Access,Jsch,Session 0 Isolation,我有一个SSH服务器正在运行,需要关闭并打开一个JavaFX应用程序。使用freeshd和JSch,我可以使用以下方法关闭应用程序: sendCommand("wmic Path win32_process Where \"CommandLine Like '%Test.jar%'\" Call Terminate"); 上面的命令将毫无问题地关闭应用程序 当我需要再次启动应用程序时,我尝试使用: sendCommand("cmd /c cd C:/Test/dist && j

我有一个SSH服务器正在运行,需要关闭并打开一个JavaFX应用程序。使用freeshd和JSch,我可以使用以下方法关闭应用程序:

sendCommand("wmic Path win32_process Where \"CommandLine Like '%Test.jar%'\" Call Terminate");
上面的命令将毫无问题地关闭应用程序

当我需要再次启动应用程序时,我尝试使用:

sendCommand("cmd /c cd C:/Test/dist && java -jar Test.jar");
发生的情况是,InteractiveServicesDetection打开一个窗口,显示消息:“此计算机上运行的程序正在尝试显示消息”。打开消息将显示JavaFX应用程序

我需要直接在远程计算机上打开JavaFX应用程序,而不显示这个。这种行为正常吗?我可以使用SSH(JSch)实现这一点吗?我知道PSExec是一种替代方案,但它必须安装在每台客户机上

在PuTTY控制台中尝试该命令时也会发生同样的情况

我认为这与“会话0隔离”有关,但我不知道这意味着什么。

通常(SSH)服务器作为Windows服务运行

窗口服务在单独的Windows会话中运行(google表示“会话0隔离”)。他们无法访问交互式(用户)Windows会话

并不是“交互式服务检测”阻止了应用程序。恰恰相反。它是“交互式服务检测”服务,用于检测服务试图在不可见会话0上显示GUI,并允许您在用户会话上复制GUI

还请注意,Windows中可以有多个用户会话(多个登录用户)。SSH服务器如何知道在哪个用户会话上显示GUI(即使可以)?我猜(尽管这只是一个猜测)“交互式服务检测”会在所有用户会话上显示提示,第一个接受提示的用户将赢得GUI


您可以在交互式Windows会话中运行SSH服务器,而不是作为服务运行。但它也有其局限性。实际上,freeshd会在安装时询问您是否希望将其作为服务安装

尽管我不建议您使用FreeShd。车太多了,保养得不好



一般来说,所有这些(通过SSH在Windows上远程运行GUI应用程序)对我来说都不是一个好主意。

什么是“直接在远程计算机上”?@MartinPrikryl我需要打开应用程序,就像我正常打开它一样(双击jar,但远程)谢谢Martin。它现在有意义了,它是作为Windows服务运行的!我将尝试另一种打开GUI的方法,因为我已经可以使用SSH终止进程。