LoadLibrary在作为服务启动时有时会失败

LoadLibrary fails sometimes when starting as service

本文关键字:失败 启动 服务 LoadLibrary      更新时间:2023-10-16

我们有一个64位应用程序作为服务在Windows 7 64位上运行。当我们手动启动一项服务时,它每次都能正常工作。当服务在系统启动时自动启动时,有时(如十分之一)会失败。问题出在LoadLibrary函数上,这实际上是它做的第一件事。这是我们DLL的一个负载,大部分代码都在那里。我无法在我的计算机上复制它,所以我只是把特殊的测试二进制文件发送给国外的同事。我使用无缓冲写入操作将文本输出添加到文件中,这样我就可以准确地看到它消失的位置。并没有崩溃转储,并没有异常,并没有NULL重试,它只是在LoadLibrary中的某个位置退出,并且在系统启动后服务并没有运行。我们的库没有DllMain,但如果我添加它,它不会到达那里(在失败的情况下)。我尝试延迟加载依赖的系统库,但没有成功。有时Windows中似乎还没有启动某些东西,因此初始化失败,我不确定。但是在LoadLibrary之前添加睡眠并不能解决问题(睡得太晚?)。你知道发生了什么以及如何进行吗?我现在要一步一步地从我们的DLL中删除代码,一个接一个地删除lib依赖项,看看它是否会在某个时刻开始工作。我很乐意在需要时提供更多信息。

联想RapidBoot Shield应用程序是原因。

RapidBoot Shield通过延迟非关键应用程序和服务来帮助您的系统更快地启动。但是,在某些情况下,RapidBoot盾牌可能会延迟对系统启动至关重要的应用程序和/或服务。这可能导致系统启动速度慢于预期,或者某些应用程序可能无法正常启动