OnSessionChange 有时不起作用

问题描述 投票:0回答:2

我有一个 Windows 服务,应该检查所有用户的登录和注销,并将它们全部插入表中。我在服务中使用了 OnSessionChange()OnShutDown() 事件来执行此操作。有时它可以工作很好,但有时当用户登录或关闭而没有任何错误时什么也不会发生,我认为有时这些事件不会触发。

我不知道我的错误是什么??

编辑:

我想创建一个winservice来保存域中所有帐户的登录和注销时间。 我尝试过 OnSessionChange() 并检查 SessionChangeDescription 属性,但它有时无法正常工作,所以我决定使用 api 函数来做到这一点。 为了我的搜索 LsaGetLogonSessionData 和也许 ISensLogon2 函数可以返回我想要的。但问题是我应该在哪里使用这个功能呢?我应该在事件中调用此函数还是它可以自行诊断登录和注销?

我还在等你的回复...... 预先感谢...

c# authentication windows-services
2个回答
1
投票

也许您的服务在登录时触发事件之前尚未启动。 但出于这些原因,注销应该有效。

您应该首先检查“CanHandleSessionChangeEvent”和“CanHandlePowerEvent”是否为True。


0
投票

对于那些无法从

username
获取
SessionChangeDescription.SessionId
的人:

有时,在

SessionLogoff
中,当您需要访问已注销的用户时,注销操作速度很快,并且
SessionId
丢失了。

我的解决方案是这样的:

  1. 定义一个全局数组,如:

    Dictionary<int, string> userlist;
    
  2. 将会话 ID 和用户名存储在

    SessionLogon
    事件中,例如:

    userlist.Add(SessionChangeDescription.SessionId,
        GetUsernameBySessionId(SessionChangeDescription.SessionId);
    
  3. 通过数组在任何地方访问

    username
    ,例如:

    userlist[changeDescription.SessionId];
    
© www.soinside.com 2019 - 2024. All rights reserved.