我在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