0

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

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.

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

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

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

我按照此链接的建议尝试了多种解决方案:以 编程方式解锁 Windows 工作站 但没有任何作用。

这样做的方法是什么?

4

2 回答 2

0

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

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

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

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

于 2013-09-10T09:41:17.373 回答
0

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

看来,这样做的唯一方法是启用自动登录到交互式会话,并重构服务以与交互式会话中的新客户端组件对话。为解决此问题的安全性缺点,Microsoft 建议实施外壳替换,以便在登录时将服务器置于“Kiosk”模式(即没有适当的凭据就无法访问 Explorer)。

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

于 2013-09-30T13:54:33.480 回答