【发布时间】:2015-05-26 16:30:43
【问题描述】:
我的 Windows 服务程序出现奇怪的错误。我的服务程序在其main() 的开头调用StartServiceCtrlDispatcher(),但有时会以1063 (ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) 失败。
我知道如果用户手动启动程序(作为控制台程序)会发生此错误。但是,事实并非如此。我添加了一个代码来检查服务程序的父进程,当这个错误发生时,它告诉 services.exe 是父进程(我认为可以安全地假设我的程序是由 SCM 正确启动)。
很遗憾,这个错误不会在我的开发机器上重现,也无法自己调试,但用户系统上捕获的错误日志告诉我们:
- 这个问题似乎只发生在该程序所有用户中的一小部分。
- 即使问题发生了,它似乎也不会重复。下次服务通常启动成功。
- 发生此问题时,
StartServiceCtrlDispatcher()会停顿大约一秒钟,然后返回失败。
有没有人看到类似的错误?如果是这样,错误的原因是什么?
【问题讨论】:
-
您是否仔细检查过您正在从主线程调用 StartServiceCtrlDispatcher,它是否在进程启动后的几秒钟内被调用,以及 SERVICE_ENTRY_TABLE 数组是否正确? (尤其要确保最后的条目是 {NULL, NULL}。)
-
是的,SERVICE_ENTRY_TABLE 已正确终止。而且,关于时间,我忘了在我原来的问题中提及,但是在 StartServiceCtrlDispatcher() 失败后,我的代码检查了时间戳,通常大约是一秒(或less) 服务进程启动后。所以,我认为延迟不太可能导致错误。
-
很奇怪。如果你不能确定一个共同的因素,那么你就很难调试,这样你就可以重现问题。作为一种可能的解决方法,如果第一次调用失败,也许您可以尝试再次调用 StartServiceCtrlDispatcher()?
标签: windows winapi windows-services