服务阻止Windows启动

时间:2012-11-13 14:43:20

标签: c++ windows service startup

我们已经自动启动了服务,在某些情况下花了很多时间加载必要的数据,比方说10分钟。在此期间,它按预期工作(处理启动所需的一些大型数据文件)。我通过C ++ SetServiceStatus函数报告了这个问题,它运行正常。

此服务不依赖于任何内容,只有一个依赖项,这也是我们自己的服务。它在这10分钟后启动,它需要第一个“服务器”服务才能完全运行以接受请求。

我认为windows会启动所有其他自动服务(通常不到10分钟)然后开始正常工作但系统在启动期间完全被阻止(我无法登录到计算机或ping计算机),直到这个特定服务已启动(由SetServiceStatus报告SERVICE_RUNNING)。当服务完全启动时,其他缺少的系统服务(网络,远程桌面所需,无论如何,它都是随机的)也会启动。这是正常的行为吗?为什么非依赖进程(如远程桌面,网络连接等)等待此过程?我错过了什么吗?

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

另一个选项是我们服务的延迟启动选项。这应该在所有其他自动服务运行时启动服务。好吧,这工作正常,Windows启动,计算机运行和响应,我们的服务启动,但性能非常糟糕,比通常慢很多倍,似乎延迟启动服务的优先级低得多或类似的东西。

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

1 个答案:

答案 0 :(得分:0)

尽快设置SERVICE_RUNNING,然后在后台继续处理。使您的其他服务适应处于运行状态的第一个服务,但尚未准备好进行服务。 服务处于启动状态的时间越长,我们从不同的Windows版本获得的问题就越多。