1

我有一个 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");

发生的情况是交互式服务检测的窗口打开,并显示以下消息:“此计算机上运行的程序正在尝试显示消息”。打开消息会显示 JavaFX 应用程序。

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

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

我认为它与“Session 0 Isolation”有关,但我不知道这是什么意思。

4

1 回答 1

1

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

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

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

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


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

虽然我完全不推荐你使用 FreeSSHd。它非常有问题,而且维护得不好。


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

于 2017-11-23T14:13:57.673 回答