2012-11-08 164 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 –