我需要在远程桌面启动程序,这个程序打开一个窗口并需要用户交互,但我的应用程序是一个 Windows 服务。
我使用的是 Windows 2008。 我成功创建了一个应用程序,但启动程序仅通过鼠标、键盘进行 session 连接,但我需要在 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 session 中启动 GUI 应用程序?你的想法或多或少是正确的,尽管你可能会遗漏一些。看看 ProcessHelper class在 Cassia library 的自动化测试源中.您可以删除大量用于 C++ 的托管杂物。如果您不需要以提升的权限运行该进程,您也可以省略 GetTokenInformation( ...TokenInformationClass.TokenLinkedToken... ) 废话。此代码已在自 Windows XP 以来的每个 Windows 版本上进行了测试。
另请注意,调用 WTSQueryUserToken 需要 SE_TCB_NAME 权限(LocalSystem 帐户默认具有该权限)。
关于c++ - WIndows服务在远程桌面运行桌面程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956704/