OnSessionChange有时不起作用

时间:2012-09-16 08:28:24

标签: c# login windows-services

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

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

编辑:

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

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

2 个答案:

答案 0 :(得分:1)

也许您的服务在登录之前未在启动之前启动。 但是注销应该是出于这些原因。

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

答案 1 :(得分:0)

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

有时,在SessionLogoff中,当您需要访问已注销的用户时,注销操作会快速执行,而SessionId会丢失。

我的解决方案是:

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

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

3.在数据的每个位置使用用户名(如userlist[changeDescription.SessionId]