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

Interactive Services Detection showing when opening an application on remote server (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");

发生的情况是来自交互式服务检测的 window 打开消息:"A program running on this computer is trying to display a message"。打开消息显示 JavaFX 应用程序。

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

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

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

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

Window 在单独的 Windows 会话中为 运行 提供服务(google 用于 "Session 0 isolation")。他们无法访问交互式(用户)Windows 会话。

并不是 "Interactive Services Detection" 阻止了应用程序。恰恰相反。 "Interactive Services Detection" 服务检测到服务正试图在不可见会话 0 上显示 GUI,并允许您在用户会话上复制 GUI。

另请注意,Windows 中可以有多个用户会话(多个登录用户)。 SSH 服务器如何知道在哪个用户会话上显示 GUI(即使它可以)?我猜想(虽然这只是一个推测)"Interactive Services Detection" 会在所有用户会话中显示提示,第一个接受提示的用户将赢得 GUI。


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

尽管我完全不建议您使用 FreeSSHd。它有很多错误而且维护得不好。


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