我看到奇怪的錯誤與我的Windows服務程序。我的服務程序在其main()
的最開始處呼叫StartServiceCtrlDispatcher()
,但它有時會因1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
而失敗。是什麼導致StartServiceCtrlDispatcher()失敗並返回1063(ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)?
我知道的是,如果用戶手動啓動程序(作爲控制檯程序)發生此錯誤。但事實並非如此。我添加了一個代碼來檢查發生此錯誤時服務程序的父進程,它告訴services.exe是父進程(我認爲可以安全地假定我的程序已由SCM正確啓動)。
不幸的是,這個錯誤不會重現我的開發機器上,不能由自己調試,而是在用戶系統中捕獲的錯誤日誌講述:
- 這個問題似乎只在所有的幾個百分點的情況發生這個程序的用戶。
- 即使問題發生,似乎也沒有重複。下次該服務通常會成功啓動。
- 發生此問題時,
StartServiceCtrlDispatcher()
在返回失敗之前停頓約一秒。
有沒有人見過類似的錯誤?如果是這樣,錯誤的原因是什麼?
您是否仔細檢查過您是否從主線程調用StartServiceCtrlDispatcher,是否在啓動過程的幾秒鐘內調用StartServiceCtrlDispatcher,以及SERVICE_ENTRY_TABLE數組是否正確? (特別是確保最終條目是{NULL,NULL}。) –
是的,SERVICE_ENTRY_TABLE被正確終止。並且,關於時間,我忘了在我原來的問題中提到,但是在StartServiceCtrlDispatcher()失敗後,我的代碼被檢查時間戳,通常在服務過程開始後大約一秒鐘(或更短)。所以,我認爲延遲不太可能導致錯誤。 –
很奇怪。如果你不能識別一個共同的因素,那麼你很難調試,因此你可以重現問題。作爲一種可能的解決方法,如果第一次調用失敗,也許可以再次嘗試調用StartServiceCtrlDispatcher()。 –