0

我有一个 Windows 服务,它通过覆盖 ServiceBase 对象成功检测到 SessionLogon 和 SessionLogoff(以及大多数其他)。这很好用。但是,这些事件似乎在身份验证后立即触发,并且在用户单击“注销”按钮(或某些自动过程将用户注销)后立即触发。除了知道用户第一次开始登录和第一次开始注销的时间之外,我还需要知道用户何时完成登录和完成注销。我目前正在寻找用户的 shell 进程以开始执行(通常是 explorer.exe)以进行登录,并且大多数情况下运行良好。如果他们正在使用漫游配置文件或正在发生其他登录操作,那么当他们的 shell 启动时,

但是对于注销,这还没有被证明是可靠的。我正在寻找一种方法来准确检测用户的注销何时完成,包括他们的所有个人资料信息何时完成同步或复制以及发生了任何其他注销操作。仅仅看着他们的 shell 程序结束似乎是不够的,因为可能需要几秒钟到几分钟的时间才能发生注销(比如他们是否有漫游配置文件)。

所以简而言之,我正在寻找一种 C# 中的编程方式来检测何时发生完全注销以及所有配置文件同步或在 SessionLogoff 事件触发后您完成了什么。

我看起来很高大上,但还没有看到有人谈论该事件发生与实际注销完成之间的时间差。

注意:我也不能依赖断开连接事件,因为用户可能会在注销后但在他们的配置文件完成同步/复制你所拥有的内容之前断开连接。我正在寻找一种方法来检测(在它发生后的几秒钟内)完成的注销。

4

1 回答 1

0

你试过听SystemEvents.SessionEnded吗?

检查SessionEndedEventArgs原因== SessionEndReasons .注销。

于 2012-11-06T22:09:11.657 回答