gpt4 book ai didi

c# - 在登录时检测来自服务的远程桌面连接 (W7/32)

转载 作者:可可西里 更新时间:2023-11-01 10:27:20 24 4
gpt4 key购买 nike

我知道(并且它有效)在 C# 中,此属性告诉我当前 session 是否为 RDP session :

System.Windows.Forms.SystemInformation.TerminalServerSession

现在,我有一个接收登录/注销和锁定/解锁事件的服务,我需要一种方法来告诉该服务正在启动的 session 是 rdp 还是本地的。

问题:服务以 SYSTEM 用户运行,上面的属性总是返回 false(我想是因为 SYSTEM 总是被认为是本地连接的用户)

我尝试在寄存器中搜索 Volatile Environment 子项以检查是否存在标识 RDP session 名称的子项:这在锁定/解锁处理程序中有效,但在登录处理程序中该子项不存在yet(子项在登录完成后创建)。

知道如何解决这个问题吗?

虽然在有限的时间内等待 key 创建有效,但我想要一种不那么“笨拙”的方法来完成它。

最佳答案

您可以通过调用 WTSQuerySessionInformation 来检测 session 是本地 session 还是远程 session WTSInfoClass 参数设置为 WTSClientProtocolType。如果您希望避免 P/Invoke,可以使用 Cassia library : 新的 TerminalServicesManager().GetLocalServer().GetSession(sessionId).ClientProtocolType

警告:这在处理 session 注销消息时不会帮助您,因为您将无法(可靠地)获取有关 session 的信息,因为它正在被销毁(但这似乎相对容易解决) .此外,上面提到的 ClientProtocolType Cassia 属性尚未发布,但您可以从 build server 获取主干构建。通过以访客身份登录并使用工件链接。

关于c# - 在登录时检测来自服务的远程桌面连接 (W7/32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com