我有一个Windows服务应该检查登录并注销所有用户并将它们全部插入到表中。我使用了 OnSessionChange()和 OnShutDown()我服务中的事件可以做到这一点。它有时工作正常,但有时当用户登录或关闭没有任何错误时没有任何事情发生,我认为有时这些事件不会触发。
我不知道我的错误是什么?
编辑:
我想创建一个winservice来保存登录并注销域中所有帐户的时间。 我已经尝试过OnSessionChange()并检查了SessionChangeDescription属性,但它有时无法正常工作,所以我决定使用api函数来做到这一点。 为了我的搜索LsaGetLogonSessionData和ISensLogon2函数可以返回我想要的。但问题是我应该在哪里使用这个功能?我应该在事件中调用此函数还是可以诊断登录和注销本身?
我还在等你的回复.... 提前谢谢......
答案 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]
)