WIndows服务在远程桌面中运行桌面程序

时间:2011-05-10 21:30:33

标签: c++ winapi windows-services remote-desktop rdp

我需要在远程桌面启动程序,这个程序打开一个窗口,需要用户进行交互,但我的应用程序是一个Windows服务。

我正在使用Windows 2008。 我创建了一个成功的应用程序,但只启动程序会话连接鼠标,键盘,但我需要在RDP中启动。

现在我正在使用这些功能。

WTSEnumerateSessions (enum all sessions, here I know if RDP)
WTSQueryUserToken (Get user token)
DuplicateTokenEx ( make a primary token)
CreateProcessAsUser (run application with SI.lpDesktop = _T("winsta0\\default"))

但这只能在控制台中运行应用程序连接到键盘,鼠标,显示器而不是RDP。

无论如何可以帮助我吗? 感谢。

2 个答案:

答案 0 :(得分:3)

所以你试图在机器上的特定RDP会话中启动GUI应用程序?你或多或少都有正确的想法,尽管你可能会遗漏几件。请查看源代码中的ProcessHelper class以自动测试Cassia library。您可以删除大量用于C ++的托管副本。如果您不需要使用提升的权限运行进程,也可以省略GetTokenInformation(... TokenInformationClass.TokenLinkedToken ...)废话。自Windows XP以来,此代码已在Windows的每个版本上进行过测试。

另请注意,调用WTSQueryUserToken需要SE_TCB_NAME权限(默认情况下为LocalSystem帐户)。

答案 1 :(得分:0)

好的,谢谢Dan Ports

这解决了我的问题。

问题是权限。 我配置了这三个权限。

SetPrivilege(hpToken, SE_ASSIGNPRIMARYTOKEN_NAME, TRUE);
SetPrivilege(hpToken, SE_INCREASE_QUOTA_NAME, TRUE);
SetPrivilege(hpToken, SE_TCB_NAME, TRUE);

注意:我创建的SetPrivilege函数。

工作很好。 再次感谢。

相关问题