1
在我的Windows服務中,我試圖在交互式用戶登錄系統時執行一些特定操作。爲此,我跟蹤WTS_SESSION_LOGON
通知。不幸的是,今天我發現該通知帶有競爭條件。與WTS_SESSION_LOGON通知競爭條件
例如,如果用戶帳戶被配置密碼,系統啓動後,我的服務啓動,由用戶輸入密碼的時候,我的服務能接收WTS_SESSION_LOGON
並處理它就好了。
如果只有一個用戶帳戶沒有密碼,則會發生此問題。啓動後,系統自動登錄該用戶,但我的服務可能稍後啓動,因此它不會收到交互式用戶登錄的任何通知。
任何想法,如果有辦法解決這個問題?或者至少告訴用戶會話會自動登錄?
PS。 WTS_CONSOLE_CONNECT
通知發生同樣的競爭情況。
謝謝。但是,我如何區別於什麼時候有人停下來,然後在服務管理器中啓動我的服務?即使交互式用戶可能在幾天前登錄過,它也會產生相同的結果。 – c00000fd
真的很重要嗎?當你的服務啓動時,它可以看到一個用戶是否已經登錄,如果是的話,做它需要做的事情,就好像它已經收到了'WTS_SESSION_LOGON'。如果您只能在新會話開始時執行您的操作,並擔心您的服務啓動得太晚,請將其配置爲儘早啓動,而不是稍後啓動。 –