gpt4 book ai didi

c# - 如何让 .NET Windows 服务检测登录、注销和切换用户事件?

转载 作者:可可西里 更新时间:2023-11-01 07:53:35 41 4
gpt4 key购买 nike

我需要在 Windows XP SP3 上跟踪当前用户(使用控制台的用户)。

我尝试了以下方法:

  • Microsoft.Win32.SystemEvents.SessionSwitch:适用于单一登录/注销事件,但无法检测切换用户。

    如果出现以下情况:

    1. 用户A登录
    2. userA 切换用户
    3. 用户B登录
    4. 用户 B 注销
    5. userA 恢复 session

    SystemEvents.SessionSwitch 未检测到事件 3 和 4

  • 监控“安全”事件日志:事件不一致且无序到达。例如,如果重播上面的列表,我会收到一个事件 ID 528(登录),然后是用户 A 恢复 session 后的两个 538(注销)。检查 event.TimeGenerated 没有帮助。如果在 SecPol.msc 上禁用审核,此方法也不起作用。

  • P/调用 WTSRegisterSessionNotification:工作正常。我必须创建一个隐藏窗体,覆盖其 WndProc 以处理 WM_WTSSESSION_CHANGE 消息,然后调用 WTSQuerySessionInformation 以获取与事件关联的用户名。这个方法看起来太复杂了,有没有更简单的方法?

编辑:

  • 每 n 毫秒调用一次 WTSGetActiveConsoleSessionId 也可以,但我正在寻找一种基于事件的方法。

最佳答案

如果您正在提供服务,您的类将派生自 ServiceBase。考虑调查 OnSessionChange方法。覆盖此方法以检测不同类型的 session 更改。它提供 session 更改的原因和新的 session 标识符。确保在您的构造函数中设置 CanHandleSessionChangeEventtrue,否则您的覆盖将不会被调用。

关于c# - 如何让 .NET Windows 服务检测登录、注销和切换用户事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5353066/

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