远程启动记事本实例作为交互式进程

本文关键字:实例 交互式 进程 记事本 程启动 启动 | 更新日期: 2023-09-27 18:30:43

我正在尝试执行以下操作:

computer         computer
   A                B
   |                | Computer B is logged off 
   |--login-------->|
   |                | Computer B logs in as an interactive user
   |<------SUCESS---|
   |-Start notepad->|
   |                | Computer B shows desktop with notepad instance open.

会话 0 隔离阻止我将记事本显示为交互式用户。

我已经尝试了很多解决方案 - 但没有一个有效。我尝试使用 WMI 获取令牌 (http://msdn.microsoft.com/en-us/library/ms257337(v=vs.80).aspx)但它不起作用。

我尝试使用登录用户功能(http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx),但它不起作用。

我尝试了以下链接建议的多种解决方案:以编程方式解锁 Windows 工作站但是那里没有任何效果。

有什么方法可以做到这一点?

远程启动记事本实例作为交互式进程

似乎不可能以编程方式完全模拟交互式用户,以便获得物理控制台和关联的 GDI 构造。

执行此操作的唯一方法是启用自动登录到交互式会话,并重构服务以与交互式会话中的新客户端组件通信。为了解决这种安全缺点,Microsoft建议实施 shell 替换,以便在登录时将服务器置于"Kiosk"模式(即没有适当的凭据,则无法访问资源管理器)。

我解决了Windows 7 SDK"会话0隔离"问题。本教程说我们应该使用 CreateProcessAsUser 函数在请求用户的桌面上创建一个进程。我尝试了提供的解决方案,但我们需要以 CreateProcessAsUser 调用中指定的用户身份登录才能交互式查看该过程。

您应该创建一个在用户登录时自动启动的agent application。将应用程序的 exe 文件的快捷方式放在 All Users 文件夹下的 Startup 文件夹中就足够了。

此应用程序应连接到 Windows 服务并等待命令。

您可以使 2 个进程通过 Names Pipes.NET Remoting 进行通信。

您最终将得到 2 个应用程序,总共 N + 1 个正在运行的进程。 每个交互式会话 1 个主服务和 1 个代理。