我们有一个64位应用程序在Windows 7 64位上作为服务运行。当我们手动启动服务时,它每次都能正常工作。当系统启动时自动启动服务时,有时(如十分之一)它会失败。问题在于LoadLibrary函数,这实际上是它做的第一件事。这是我们的DLL的负载,其中大部分代码是。我无法在我的计算机上重现它,所以我只是向国外的同事发送特殊测试二进制文件。我使用无缓冲写入操作将文本输出添加到文件中,这样我就可以确切地看到它消失的位置。没有崩溃转储,没有异常,没有NULL重试,它只是退出LoadLibrary中的某个地方,并且在系统启动后服务没有运行。我们的库没有DllMain,但如果我添加它,它就不会到达那里(在失败的情况下)。我尝试延迟加载依赖系统库,但没有成功。似乎有时某些东西尚未在Windows中启动,因此初始化失败,我不确定。但是在LoadLibrary之前添加睡眠并不能解决问题(睡得太晚了?)。您有什么想法,以及如何进行?我目前要逐步从我们的DLL中删除代码,逐个删除lib依赖项,看看它是否会在某个时刻开始工作。我很乐意在需要时提供更多信息。
答案 0 :(得分:0)
联想RapidBoot Shield应用程序就是原因。
“RapidBoot Shield通过延迟非关键应用程序和服务来帮助您的系统更快地启动。但是,在某些情况下,RapidBoot Shield可能会延迟对系统启动至关重要的应用程序和/或服务。这可能会导致系统启动速度低于预期或某些应用程序可能无法正常启动。“