服务阻止windows启动

Service blocks windows startup

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

我们已经自动启动了服务,在某些情况下,它会花费大量时间加载必要的数据,比如说10分钟。在此期间,它按预期工作(处理启动所需的一些巨大数据文件)。我通过C++SetServiceStatus函数报告程序,它运行良好。

这个服务不依赖任何东西,只有一个依赖,那就是我们自己的服务。它在这10分钟后启动,需要第一个"服务器"服务完全运行才能接受请求。

我原以为windows会启动所有其他自动服务(通常不到10分钟),然后开始正常工作,但在启动这一特定服务之前,系统在启动过程中被完全阻止(我无法登录计算机或ping计算机)(SetServiceStatus报告service_RUNNING)。当out服务完全启动时,其他丢失的系统服务(网络、远程桌面等所需的服务,这是随机的)也会启动。这是正常行为吗?为什么非依赖进程(如远程桌面、网络连接等)在等待此进程?我是不是错过了什么?

我试图添加一些依赖项来推迟服务的启动,但最终我发现许多依赖项和行为仍然是随机的(因为服务的顺序是随机的)。有时我可以登录,但例如"开始"按钮只有在我的服务启动的那10分钟后才开始工作。我不确定要依赖的"最后一项服务"是什么,以及要将哪些服务包括在我的依赖列表中,在某些计算机上,这些服务可能会被禁用,这可能会带来新的问题。。。所以我不太喜欢这个解决方案。

另一个选项是我们服务的延迟启动选项。这应该在所有其他自动服务都在运行时启动服务。好吧,这很好,windows启动,计算机运行和响应,我们的服务启动了,但性能很差,比平时慢了很多倍,似乎延迟启动的服务的优先级要低得多或类似的东西。

我目前唯一的解决方案是向系统报告我的服务正在运行(通过SetServiceStatus函数),但要继续加载(这很有效,我测试了它)。但是,我们的依赖服务有问题,因为它需要在第一个真正准备好时启动。这是可以解决的,但我仍然想知道这怎么可能,如果有什么东西我可以用来保持自动启动服务的当前状态,当它真正完全启动并准备好工作时,它会报告"已启动"。谢谢你的任何想法。

尽快设置SERVICE_RUNNING,然后在后台继续处理。使您的另一个服务对处于运行状态但尚未准备好服务的第一个服务具有弹性。服务处于启动状态的时间越长,我们从不同的windows版本中遇到的问题就越多。