2

我的应用程序在 Windows Server 2008 下作为服务运行。我正在寻找一种检测活动控制台会话的方法。这可以是控制台或作为管理会话(“mstsc /admin”)启动的 RDP 会话。

控制台会话称为“控制台”,但我迷失了 RDP 会话。在 Windows 2003 下,这很容易,因为控制台会话总是以 id 0 运行。这在 Vista 之后发生了变化,所以我正在寻找另一种方法来找出答案。

我已经检查了 WTSxxx Win32 API,但没有找到我要找的东西。

有人可以帮忙吗?

4

2 回答 2

1

如果您要查找当前附加到物理控制台的会话 ID,则 API 为WTSGetActiveConsoleSessionId

于 2011-02-08T17:07:53.260 回答
0

一种选择是将您的服务CanHandleSessionChangeEvent设置为 true 然后实施OnSessionChange(SessionChangeDescription changeDescription)如果ChangeDescription.Reason == SessionChangeReason.ConsoleConnect有人连接到控制台。

protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
    if(changeDescription.Reason == SessionChangeReason.ConsoleConnect)
    {
        //use changeDescription.SessionId to find if the logged in user 
        //  to that session is an administrator.
    }
}
于 2011-02-08T17:05:39.687 回答