2012-09-16 52 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]