所以我现在已经开发了这个程序一段时间......它的目的是为我们的IT团队充当资产管理者(可能还有未来)。我有2项服务,我们将其称为"经理"和" IAM"现在。 "经理"管理所有服务(当前只有库存资产管理器称为" IAM"),例如自动更新等,而资产管理器完成其工作。
无论如何,它现在已经有一段时间了。最近我实现了一个自动更新功能(实际上仍需要进行测试并可能进行调试)。在执行此操作时,我需要使命名保持一致(例如,将我的服务重命名为"更新程序"以及" CppWindowsService"到软件的实际名称)。
在此之前,它一直很好用!启动,停止,安装和卸载,没有打嗝。我更改了所有内容的名称,并确保所有内容都编译好。看起来不错。安装适用于"经理"和" IAM"现在,但是一旦我尝试启动它,我得到:
StartService失败(1053)
此外,当我尝试从services.msc启动它时,我收到以下错误消息:
Windows无法在本地计算机上启动该服务。
错误1053:服务未及时响应启动或控制请求
关于这一点的奇怪之处在于它不会等待任何类型的超时。它只是立即吐出消息。该消息来自我的wmain()调用的代码(windows入口点。main()
否则。)函数。
if (!StartService(
schService, // handle to service
0, // number of arguments
NULL)) // no arguments
{
printf("StartService failed (%d)\n", GetLastError());
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
return;
}
else printf("Service start pending...\n");
在Windows事件日志中,我收到错误后包含以下详细信息的应用程序错误。
错误应用程序名称:InITManager.exe,版本:0.0.0.0,时间戳:0x59e11e44
错误模块名称:ucrtbase.dll,版本:10.0.15063.674,时间戳:0x8ac9f9d4
异常代码:0xc0000409
故障偏移:0x000000000007350e
错误进程ID:0x3008
错误申请开始时间:0x01d346915918e17d
错误申请路径: C:\ Users \用户collin.walker \桌面\ InITService \ C ++ \ 64 \推出\的manager.exe
错误模块路径:C:\ WINDOWS \ System32 \ ucrtbase.dll
报告ID:7fcbdcc4-be8e-476a-960f-4fa1fb21f892
错误包全名:
错误包相关的应用程序ID:
其他信息:ucrtbase.dll由Visual Studio使用,并与Release版本相关联,其中ucrtbased.dll与调试器版本相关联。我正在发布模式下构建。
现在,我已经被告知这个问题不是我的代码,但如果有人觉得他们需要看到它,那么我会把它包括在内。它虽然非常直接的c ++ winapi。
如果有人对如何解决此问题有任何进一步的建议,请告诉我,并提前感谢所有帮助!
答案 0 :(得分:0)
在我的故障排除过程中忘记了这篇文章......无论如何,我想通了。上面的评论是现货!
对我来说,缓冲区溢出来自我更改我的服务名称,这也改变了程序目录名称。当我在服务的构造函数中初始化日志记录对象时发生错误。我只在构造函数中有两行代码,所以我完全忘了看那里。更改了正在创建日志的硬编码目录位置,这一切都开始工作了!谢谢你们的帮助信息!