从微软网站(见 msdn.microsoft。 COM / EN-US /库/ ms683502(VS.85)的.aspx )上面清清楚楚地写着 “服务不能直接与用户的Windows Vista中的互动。”

所以决定通过使用来测试此“PSEXEC -s的cmd.exe”。据我所知,“PSEXEC”以打开命令提示符创建服务。不用说,它的工作。于是我决定结合使用“EnumWinSta GUI”与PSEXEC切换到Winlogon桌面。令我惊讶,我甚至可以开始这个桌面上的“cmd.exe的”。这是否意味着从服务中创建的可互动的新工艺?

还是因为PSEXEC做某种黑魔法?如果是这样,它是如何做到的呢?

我试图显示从服务全屏窗口,进入在Vista和XP的Winlogon桌面对象。

有帮助吗?

解决方案

服务内运行的代码不能直接与交互会话交互。

但是,运行有足够权限服务代码可以创建一个特定用户的桌面中运行一个新的进程 - 让交互式会话的用户的令牌,并呼吁CreateProcessAsUser,例如:

您可以使用WTSGetActiveConsoleSessionId获取活动控制台会话,谁是真正的机器上的用户的会话。然后WTSQueryUserToken可用于获得令牌。

您服务还可以使用会话更改通知在其处理函数来查看当用户登录/注销,解除他们的会话,等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top