2

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

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

编辑 :

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

我还在等你的回复....提前谢谢...

4

2 回答 2

1

也许您的服务没有在登录时触发事件之前启动。但是出于这些原因,注销应该可以工作。

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

于 2013-02-17T10:53:05.123 回答
0

对于那些从 SessionChangeDescription.SessionId 获取用户名有问题的人:

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

我的解决方案是这样的:

1.定义一个全局数组(如Dictionary<int, string> userlist

2.在 SessionLogon 事件中存储会话 id 和用户名(如userlist.Add(SessionChangeDescription.SessionId,GetUsernameBySessionId(SessionChangeDescription.SessionId)

3.通过数组(如userlist[changeDescription.SessionId])访问每个地方的用户名

于 2017-08-07T09:13:06.103 回答