启动时出现ucrtbase.dll上的Windows C++服务错误

问题描述:

因此,我一直在开发此程序一段时间......它的目的是为我们的IT团队充当资产管理器(可能更多)。我有两项服务,我们现在称之为“经理”和“IAM”。 “经理”负责管理所有服务(目前只有库存资产管理员称为“IAM”),例如自动更新等,而资产管理人员则负责管理工作。启动时出现ucrtbase.dll上的Windows C++服务错误

无论如何,它现在工作很好。最近我实现了一个自动更新功能(实际上仍然需要测试并且可能会被调试)。在执行此操作时,我需要使命名保持一致(例如,将我的服务从“Updater”和“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:\用户\ collin.walker \桌面\ InITService \ C++ \ 64 \推出\的manager.exe

错误模块路径:C:\ WINDOWS \ SYSTEM32 \ ucrtbase。dll的

报告编号:7fcbdcc4-be8e-476A-960F-4fa1fb21f892

断裂作用包全名:

断裂作用包相对应用程序ID:

其他信息:ucrtbase.dll是由Visual Studio使用并与Release版本关联,其中ucrtbased.dll与调试器版本相关联。我正在发布模式下构建。

现在,我已经被告知这个问题不是我的代码,但如果有人觉得他们需要看到它,那么我会包括它。它非常简单的C++ winapi的东西。

如果任何人有任何进一步的建议如何解决这个问题,请让我知道,并提前感谢所有帮助!

+0

它与ucrtbase.dll没有任何关系,它只是坏消息的持有者。 0xc0000409是一种令人讨厌的异常,当您的代码破坏堆栈帧时会引发异常。最典型的是一个char []局部变量,其中您拷贝了太多字符。在另一台机器上生产可靠运行的代码是该项目的另外90%的常见不幸事件。使用附加的调试器运行它,以在发生时获得中断。 –

+0

@HansPassant,'ucrtbase + 7350e'是CRT ['abort']中的int 0x29指令(https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/abort)函数。这是['__fastfail'内部](https://docs.microsoft.com/en-us/cpp/intrinsics/fastfail)['KERNEL_SECURITY_CHECK_FAILURE'](https://docs.microsoft.com/en- us/windows-hardware/drivers/debugger/bug-check --- bug-check-0x139-kernel-security-check-failure)的代码是'FAST_FAIL_FATAL_APP_EXIT'(7)。该中断被'KiRaiseSecurityCheckFailure'服务,这会引发'STATUS_STACK_BUFFER_OVERRUN'(0xC0000409)。 – eryksun

+0

真棒,这有助于一吨!谢谢!我感谢所有的帮助! (不是) – TheEggSample

在我的故障排除过程中忘记了这篇文章......无论如何,我想通了。上面的评论是现货!

对我来说,缓冲区溢出来自我改变我的服务名称,这也改变了程序目录名称。当我在服务的构造函数中初始化我的日志记录对象时发生错误。我只有2行代码在构造函数中,所以我完全忘了看那里。更改了正在创建日志的硬编码目录位置,并且这一切都开始奏效!感谢球员的有用信息!