我有一個Delphi 6應用程序得到EOSError異常,代碼5,訪問被拒絕但只有當我切換到另一個Windows 7用戶帳戶,或者我鎖定電臺。我正在打印一個堆棧跟蹤,但是這個錯誤似乎是直接從Application.Run()語句和Application.ProcessMessages()直接在堆棧下面發出的。堆棧的其餘部分是我的異常處理代碼。COM COM調用後,得到EOSError異常(訪問被拒絕),但只有當切換用戶或鎖定在Windows上的站點7
在操作過程中,代碼確實會調用ShellExecuteEx()並訪問COM/ActiveX對象,但只有在用戶明確單擊某個按鈕時。這隻發生在Windows 7上,而不是Windows XP上。我更改了我的應用程序,使其完全安裝到用戶應用程序數據目錄,因此不需要訪問任何管理員權限目錄。我知道這應該不重要,但我指出了以防萬一。
發生這種情況時,異常情況會變得很快而且很激烈。我將它們截獲並將它們轉儲到錯誤日誌中,以避免用大量的對話框來困擾用戶。任何人都可以告訴我什麼會通過切換離開或鎖定當前登錄的用戶來觸發大量這些錯誤?當前用戶帳戶不活動時,爲什麼我的應用程序會遇到麻煩?
有一個想法。如果用戶當前未登錄,是否會執行一些位圖操作?我確實有一個旋轉標籤雲,可以持續進行Windows API位圖操作來更新標籤雲圖像。這可能與它有關嗎?
如果是的話,我可以嘗試停用在當前用戶切換離開或鎖定標籤雲,但是我相信我需要的是反應在這個堆棧溢出文章中提到的事件Delphi代碼:
How do I detect a Lock This Computer command from a WPF application?
UPDATE:我做了一些額外的測試。直到我訪問印象筆記的COM/ActiveX接口時纔會發生錯誤,這是我與之交互的軟件。一旦我第一次打電話給Evernote vai COM API,當我鎖定電臺時,錯誤就會立即發生。
爲會話鎖定/解鎖/登錄/註銷檢測的基礎代碼,你可以按照['這POST'(http://stackoverflow.com/a/4854908/960757) 。 – TLama
@TLama。謝謝!順便說一句,我已經添加了我的orignal文章的更新。這開始看起來像我的作爲父進程的應用程序和Evernote的ENScript.exe作爲子進程之間的一些奇怪的問題。 –
查看[解釋來自GetKeyState/GetCursorPos的錯誤](http://stackoverflow.com/q/20142166/2523663)瞭解類似問題。 –