我有一个Windows服务,它通过覆盖ServiceBase对象成功检测到SessionLogon和SessionLogoff(以及大部分的othes)。这很好用。但是,看起来这些事件在身份验证后立即触发,并在用户单击“注销”按钮后立即触发(或某些自动进程将用户关闭)。除了知道用户何时首次开始登录并首先开始注销外,我还需要了解用户何时完成登录并完成注销。我目前正在寻找用户的shell进程来开始执行(通常是explorer.exe)以进行登录,并且大多数情况下都可以正常运行。如果他们的shell已经启动,如果他们正在使用漫游配置文件或其他登录操作正在进行,我几乎可以肯定,当shell运行时,已经发生了大部分登录过程。
然而,对于注销,这未被证明是可靠的。我正在寻找一种方法来准确地检测用户的注销何时完成,包括何时所有的配置文件信息已经完成同步或复制以及其他任何注销操作已经发生。只是观察他们的shell程序结束似乎不够,因为注销可能需要几秒到几分钟(比如说他们有漫游配置文件)。
简而言之,我正在寻找C#中的编程方式,以检测何时发生完全注销以及所有配置文件同步或者在SessionLogoff事件之后已完成 已解雇。
我看起来很高,但是没有看到有人在谈论该事件发生时和实际注销结束之间的时差。
注意:我也不能依赖断开事件,因为用户可能会在注销后但在他们的配置文件完成同步/复制你的内容之前断开连接。我正在寻找一种方法来检测(在它发生的几秒钟内)完成的注销。
答案 0 :(得分:0)
您是否尝试过聆听SystemEvents.SessionEnded?
检查SessionEndedEventArgs。Reason == SessionEndReasons。注销。