c++ - WIndows服务在远程桌面运行桌面程序

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

我需要在远程桌面启动程序,这个程序打开一个窗口并需要用户交互,但我的应用程序是一个 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 classCassia library 的自动化测试源中.您可以删除大量用于 C++ 的托管杂物。如果您不需要以提升的权限运行该进程,您也可以省略 GetTokenInformation( ...TokenInformationClass.TokenLinkedToken... ) 废话。此代码已在自 Windows XP 以来的每个 Windows 版本上进行了测试。

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

关于c++ - WIndows服务在远程桌面运行桌面程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5956704/

相关文章:

c++ - ofstream 不会在文档文件夹中创建文件

windows - 如何在 Delphi 中枚举另一个进程的窗口?

java - java servicewrapper 的替代品?

c# - 在 Windows 服务中使用 ConfigureAwait(false)?

c++ - 极度 CPU 密集型闹钟

c++ - 将布局从一个类添加到另一个类在 Qt 中不起作用

c++ - OpenSceneGraph 无法启动,因为缺少 osg80-osgd.dll

.net - .NET 中的窗口句柄可以更改它的值吗?

c# - 如何以编程方式获取当前音频电平?

java - Wildfly - 如何在 Windows 上以域模式安装