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

时间:2013-09-10 09:24:31

标签: c# authentication

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

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),但它不起作用。

我按照此链接的建议尝试了多种解决方案: Unlock Windows workstation programmatically 但没有任何效果。

这样做的方法是什么?

2 个答案:

答案 0 :(得分:0)

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

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

您可以通过Names Pipes.NET Remoting进行2个流程的沟通。

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

答案 1 :(得分:0)

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

看来,执行此操作的唯一方法是启用自动登录到交互式会话,并重构服务以与交互式会话中的新客户端组件通信。为解决此问题的安全性缺点,Microsoft建议实施shell替换以将服务器放置在&#34; Kiosk&#34;登录时的模式(即没有适当的凭据时没有Explorer访问权限)。

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