2012-09-16 50 views
2

我有一个窗口服务,应检查登录和注销所有用户,并插入他们都在table.I已经使用OnSessionChange()在我的服务OnShutDown()事件要做到这一点。它有时可以正常工作,但有时在用户登录或关闭时没有任何错误发生,我认为有时候这些事件不会触发。OnSessionChange有时不工作

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

编辑:

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

我还等着你的答复.... 在此先感谢...

回答

1

也许你的服务没有烧制的事件之前在登录时启动。 但注销应为工程那些原因。

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

0

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

有时,在SessionLogoff当你需要注销接入用户,注销行动做了快速的SessionID丢失。

我的解决办法是这样的:

1.定义一个全局数组(如Dictionary<int, string> userlist)在SessionLogon事件

2.store会话ID和用户名(如userlist.Add(SessionChangeDescription.SessionId,GetUsernameBySessionId(SessionChangeDescription.SessionId)

3.access用户名中每个地方按阵列排列(如userlist[changeDescription.SessionId]