网上通用的OpenSCManager->OpenService->StartService这种启动方式是正确的,但是很多人遇到开启服务时出现1053错误,下面来分析与解决
官网对于StartServiceW的描述(我程序里用的宽字符版本)
https://docs.microsoft.com/zh-cn/windows/win32/api/winsvc/nf-winsvc-startservicew
一开始GetLastERROR错误1053,百度解决方案大致就”注册表修改超时、开启桌面交互“这两种,但是依旧不行
各种骚操作都没有解决,直到我看到官方文档对返回值的描述
ERROR_SERVICE_REQUEST_TIMEOUT |
The process for the service was started, but it did not call StartServiceCtrlDispatcher, or the thread that called StartServiceCtrlDispatcher may be blocked in a control handler function. |
翻译一下:
错误\服务\请求\超时
服务的进程已启动,但它没有调用StartServiceCtrlDispatcher,或者在控制处理程序函数中可能阻止调用StartServiceCtrlDispatcher的线程。
原理这个错误的超时不仅包含启动超时,也包含线程启动后没有给管理器报告状态的超时
现在跳转到StartServiceCtrlDispatcherA的官方文档,查看它的例子
https://docs.microsoft.com/zh-cn/windows/win32/api/winsvc/nf-winsvc-startservicectrldispatchera
For an example, see