【问题标题】:Is it possible to launch a remote app and have it displayed interactively in Windows?是否可以启动远程应用程序并在 Windows 中以交互方式显示它?
【发布时间】:2011-07-29 12:10:05
【问题描述】:

我确定以前有人问过这个问题,但我还没有找到问题或答案。

我有一个自定义选项卡式应用程序,它在每个选项卡上显示来自各种科学仪器的数据。当在我的应用程序中单击一个选项卡时,我的用户想要单击一个选项卡并让我的应用程序在另一台机器上启动各种仪器控制器应用程序(或将其带到前台)。

我尝试了很多不同的方法,从编写自己的 C# 应用程序来执行 Process.Start,编写第二个 C# 应用程序,它存在于远程机器上并启动适当的应用程序,使用 Sysinternals 的 psexec 等。我可以让进程在远程机器上成功启动,但是无论我提供哪个用户的凭据(并且无论用户是否以交互方式登录),GUI 都会丢失。我相信这是 Windows 中的安全增强功能。

查看Create() method of the Win32_Process MSDN documentation 揭示了我的怀疑——出于安全原因,Win32_Process.Create 方法不能用于远程启动交互式进程。

看起来我能做的最好的事情是在一段时间后remotely access Task Scheduler to kick off the remote application。我确信这会给我的应用带来糟糕的用户体验(谁想点击一个标签并等待 30 秒?)所以我避免使用这种方法。

有人可以提出一种可行的方法,或帮助反驳这样做的可能性吗?

EDIT psexec 自己的documentation 证实了我的论点,即这是不可能的。 -x 标志显示“在 Winlogon 桌面上显示 UI(仅限本地系统)”。如果可能的话,我相信 Sysinternals 会成功的。

【问题讨论】:

  • 您是否考虑过将远程计算机上的服务更改为正常的交互过程(可能只位于通知区域)
  • 另一种可能尚未加强的远程处理方法是在远程服务器上创建 COM 对象。我过去曾这样做过,从远程对象公开方法。当您调用它们时,它们只是将密钥发送到远程计算机上已经运行的程序。
  • @Rowland,是的,我试过了。它也不会这样做。
  • 谢谢@Morbo,但我正在寻找一种低预算的方法。近十年来我没有搞砸过 COM。

标签: c# windows interactive remote-access


【解决方案1】:

在远程计算机上有一个正常的、交互式的进程来监听命令。然后,您可以向其发送命令以运行相应的进程。你可以这样做:

  1. 将您的进程放在“开始”菜单中用户的“启动”组中(或注册表的 HKLM/HKCU 运行部分)。
  2. 然后,只要用户登录,您的进程就会以交互方式运行。您可以创建一个托盘图标来指示它正在运行。
  3. 您的进程打开一个 TCP 端口来侦听命令。
  4. 另一台计算机上的控制进程向 TCP 端口发送命令。
  5. 您的进程运行指定的命令。因为您的进程以交互方式运行,所以子进程也将是交互的。

TCP 端口将是一个巨大的安全漏洞。尽可能多地或尽可能少地保护它。

【讨论】:

  • 如果我们忽略安全性,效果会很好。谢谢@James。
  • @retrodrone 这就是我的建议,但你说没用?
  • 对不起@rowland,我没有意识到你在提倡套接字方法。 Process.Start 不起作用,这就是我认为你的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2012-08-23
  • 1970-01-01
  • 2018-11-26
  • 2011-03-27
  • 2010-11-14
  • 2013-02-05
相关资源
最近更新 更多