我在C++中編寫了一個Windows服務,需要在每天晚上的午夜重新啓動,因此我對其調用exit(1)以便它可以由SCM重新啓動。問題是它似乎每隔一夜就會部分啓動並掛起。在事件日誌中,我得到:Windows服務不會停止並重新啓動
應用程序彈出 - 應用程序錯誤:「0x0043c145」處的指令引用「0x00000035」處的內存。內存不能被「讀取」。
在打開與SQL Server 2008數據庫的ODBC連接之前,它似乎失敗了。我可以確認服務在重新啓動之前實際退出;儘管如此,當它停止並重新啓動時,我每隔一段時間就會收到一次這個錯誤,但是如果我反覆停止並手動重新啓動服務,我永遠不會讓它失敗,如果我從一個終端端口控制進程並手動退出從那裏它也永遠不會失敗。
如果我嘗試附加一個調試器,該過程就會退出,因此我無法通過這種方式收集任何有用的信息。
我正在試圖弄清楚發生了什麼事情,但我不知道從哪裏開始。有人有主意嗎?
在exit()後進程是否完全終止?先用SCM的非autorestart cfg進行測試來檢查。 – pinichi 2010-10-07 06:39:43
您不應該使用exit()來退出服務;有一個協議,您必須遵循才能與SCM通信並正常關機。將調試器連接到正在運行的服務不應該導致它意外退出,所以它聽起來像是有些問題。該錯誤消息表明您的代碼可能試圖在某處取消引用NULL指針。 – Luke 2010-10-07 11:17:50
Pinichi,今晚我會試試 – jjacksonRIAB 2010-10-09 00:29:18