C++调用StartService启动服务失败1053分析与解决

在尝试使用StartService启动系统服务时遇到1053错误,常规解决方案如修改注册表和开启桌面交互无效。通过深入官方文档,发现错误源于服务进程未调用StartServiceCtrlDispatcher。服务程序需要调用该函数向服务管理器报告启动成功状态,否则视为超时。参考官方服务程序代码例子,需要在服务程序内部实现状态上报。
摘要由CSDN通过智能技术生成

网上通用的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值