【问题标题】:Interactive Services Detection showing when opening an application on remote server (JSch)在远程服务器 (JSch) 上打开应用程序时显示的交互式服务检测
【发布时间】:2018-05-07 11:11:27
【问题描述】:

我有一个 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”有关,但不知道这是什么意思。

【问题讨论】:

  • 什么意思“直接在远程计算机上”
  • @MartinPrikryl 我需要像正常打开它一样打开应用程序(双击 jar,但远程)

标签: java ssh remote-access jsch session-0-isolation


【解决方案1】:

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

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

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

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


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

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


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

【讨论】:

  • 谢谢马丁。现在很有意义,它作为 Windows 服务运行!我将尝试另一种打开 GUI 的方法,因为我已经可以使用 SSH 终止该进程。
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2013-11-28
  • 1970-01-01
  • 2012-11-15
相关资源
最近更新 更多