我有一个 Windows 服务,应该检查所有用户的登录和注销,并将它们全部插入表中。我在服务中使用了 OnSessionChange() 和 OnShutDown() 事件来执行此操作。有时它可以工作很好,但有时当用户登录或关闭而没有任何错误时什么也不会发生,我认为有时这些事件不会触发。
我不知道我的错误是什么??
编辑:
我想创建一个winservice来保存域中所有帐户的登录和注销时间。 我尝试过 OnSessionChange() 并检查 SessionChangeDescription 属性,但它有时无法正常工作,所以我决定使用 api 函数来做到这一点。 为了我的搜索 LsaGetLogonSessionData 和也许 ISensLogon2 函数可以返回我想要的。但问题是我应该在哪里使用这个功能呢?我应该在事件中调用此函数还是它可以自行诊断登录和注销?
我还在等你的回复...... 预先感谢...
也许您的服务在登录时触发事件之前尚未启动。 但出于这些原因,注销应该有效。
您应该首先检查“CanHandleSessionChangeEvent”和“CanHandlePowerEvent”是否为True。
对于那些无法从
username
获取 SessionChangeDescription.SessionId
的人:
有时,在
SessionLogoff
中,当您需要访问已注销的用户时,注销操作速度很快,并且SessionId
丢失了。
我的解决方案是这样的:
定义一个全局数组,如:
Dictionary<int, string> userlist;
将会话 ID 和用户名存储在
SessionLogon
事件中,例如:
userlist.Add(SessionChangeDescription.SessionId,
GetUsernameBySessionId(SessionChangeDescription.SessionId);
通过数组在任何地方访问
username
,例如:
userlist[changeDescription.SessionId];