首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从C#.net中检测RDC

如何从C#.net中检测RDC
EN

Stack Overflow用户
提问于 2012-11-29 05:30:21
回答 2查看 2.6K关注 0票数 0

可能重复: 如何在.NET中检索已登录/连接的用户列表?

我在一台计算机上将WCF服务托管在IIS中。现在,我想在服务中编写一个方法,通过该方法可以检测托管的计算机当前是否被任何远程桌面连接所使用。

有没有其他更好的方法来找出这一点,以及检测RDC连接的确切代码API是什么。

我使用的是C#.net,框架3.5

EN

回答 2

Stack Overflow用户

发布于 2012-11-29 08:09:10

你有两个选择。您可以将P/调用调用用于WSTAPI库,但是很容易造成混乱并获得资源泄漏。

另一个选项是使用WTSAPI包装器库桂花。我以前使用过它,它很容易使用,而且这些类是相当自我记录的。

在卡斯西亚,你的功能很简单

代码语言:javascript
复制
public bool IsComputerUsedByTS()
{
    var tsMgr = new TerminalServicesManager();
    var localSvr = tsMgr.GetLocalServer();
    var sessions = localSvr.GetSessions();
    foreach(var session in sessions)
    {
        if(session.ConnectionState == ConnectionState.Active || 
           session.ConnectionState == ConnectionState.Connected) //Add more states you want to check for as needed
        {
            return true;
        }
    }
    return false;
}

我没有测试上面的内容,如果您是用于RDP会话的控制台会话,则使用"active“。有更多的州,看看[医]枚举的所有选项。

票数 2
EN

Stack Overflow用户

发布于 2012-11-29 07:58:52

RDP服务器默认在端口3389上监听(但可以配置不同)。

因此(即使不是100%可靠的),这可以用于检查任何活动的RDP连接。

代码语言:javascript
复制
bool inUse = IPGlobalProperties.GetIPGlobalProperties()
              .GetActiveTcpConnections()
              .Any(tcp => tcp.LocalEndPoint.Port == 3389);

编辑

我添加了@t3hn00b的建议。

代码语言:javascript
复制
int port = 3389;
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", false))
{
    if (key != null)
    {
        object value = key.GetValue("PortNumber");
        if (value != null) port = Convert.ToInt32(value);
    }
}

命名空间: System.Net.NetworkInformation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13619459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档