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

WIndows service run desktop program in Remote Desktop

本文关键字:桌面 运行 程序 程桌面 服务      更新时间:2023-10-16

我需要在远程桌面中启动程序,该程序打开一个窗口,需要用户交互,但我的应用程序是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 的运行应用程序。

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

因此,您正在尝试在计算机上的特定 RDP 会话中启动 GUI 应用程序?你或多或少有正确的想法,尽管你可能错过了一些部分。查看源代码中的 ProcessHelper 类,用于对 Cassia 库进行自动测试。您可以去除许多受管理的面包屑以用于C++。您也可以省略 GetTokenInformation( ...TokenInformationClass.TokenLinkedToken... )废话,如果您不需要使用提升的权限运行该过程。自Windows XP以来,此代码已在Windows的每个版本上进行了测试。

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

好的,谢谢丹·波特斯

这解决了我的问题。

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

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

注意:我创建的SetPrivilege函数。

而且工作很好。再次感谢。