2012-11-08 55 views
4

我有一个在Windows服务(0)会话中运行的服务。 从客户端连接后,我需要为给定的用户凭证创建一个新的Windows会话,登录该用户并启动一个应用程序进入此新会话。以编程方式创建Windows会话

有没有办法以编程方式为给定的用户凭证创建用户会话?

+2

原则上,至少可以使用RDP创建新的用户会话。你至少需要一个最小的RDP客户端。一种可能性是FreeRDP,可以在Apache许可证下获得。我不确定它是否在Windows上编译,您可能需要做一些移植。 –

+0

是否能够创建会话可能性? – 4x6hw

+0

是的,如上所述http://www.freerdp.com/是解决方案。 –

回答

5

AFAIK,您无法以可编程方式创建会话。客户端必须使用终端服务或远程桌面连接到机器。但是,如果您只需要以该用户的身份运行进程而不让其在屏幕上可见,则可以通过编程方式登录到用户帐户并进行模拟。看看LogonUser()ImpersonateLoggedOnUser(),CreateProcessAsUser()CreateProcessWithLogonW()

+1

我已经考虑过这些API。不幸的是,这不适用于我的场景,因为我需要启动一个基于UI的应用程序,并且不适合会话0隔离。这就是为什么我需要一个“真正的”用户会话,而不是服务会话。 –

+1

在会话0中运行的服务可以使用'CreateProcessAsUser()'在现有的用户会话中运行UI进程。我自己在自己的服务中这样做,它工作正常。但是AFAIK,一项服务不能创建一个新的UI会话,它只能与现有的会话进行交互。 –

+5

Windows Server 2012提供了一个应该能够创建用户会话的API。不幸的是,它在Windows 8或以前版本的Windows Server上不可用。请参阅http://msdn.microsoft.com/en-us/library/dd919947%28v=vs.85%29.aspx –