我在Windows服务程序中看到了奇怪的错误。我的服务程序在其main()
的最开头调用1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT)
,但有时会因StartServiceCtrlDispatcher()
而失败。
我知道如果用户手动启动程序(作为控制台程序),则会发生此错误。但是,事实并非如此。我在发生此错误时添加了一个代码来检查服务程序的父进程,它告诉services.exe是父进程(我认为它是'可以安全地假设我的程序是由SCM正确启动的。
不幸的是,这个错误在我的开发机器上无法重现,无法自行调试,但用户系统上捕获的错误日志告诉:
Function onlyDigits(s As String) As Integer
会在失败前返回约一秒钟。有没有人见过类似的错误?如果是这样,那么错误的原因是什么?
答案 0 :(得分:7)
正如你已经可以看到谷歌没有答案和任何东西,问题并不常见。我相信问题在于你的服务,并且它是从进程的开始到StartServiceCtrlDispatcher()
执行的代码,并且很可能需要某种形式的破坏系统资源,可能是堆或HANDLE
。
听到这个消息你会感到很遗憾,但我不会对你的问题有一个神奇的答案。相反,我可以建议一些故障排除。
Microsoft Application Verifier在查找损坏方面非常有用。我建议你:
Basics\Heaps
。Basics\Handles
。与Basics\Heaps
不同,这有时会引发“误报” - 代码中的错误不会造成太大伤害。无论如何,既然你正在狩猎,你最好修好你能找到的一切。我最担心的是双重释放HANDLE
或类似的东西。错误地解雇服务经理HANDLE
肯定会导致您的问题。Basics\*
中的其他选项,但我认为这不会有所帮助。main()
和StartServiceCtrlDispatcher()
之间的代码,以及您可以拥有的任何全局构造函数。使用HANDLE
来查找潜在的缓冲区溢出和错误。答案 1 :(得分:0)
提示:我使用_wfopen / fwrite / fclose来记录一些消息。不知何故,183被内部抛出并导致了这次失败1063.我删除了日志记录,它开始正常工作,因为什么都没发生。任何分钟错误都可能导致您。从服务开始,它将列出工资错误(在我的情况下为183)。