【发布时间】: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