1

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

该服务不依赖于任何东西,并且只有一个依赖项,即我们自己的服务。它在这 10 分钟后启动,它需要第一个“服务器”服务完全运行才能接受请求。

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

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

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

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

4

1 回答 1

0

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

于 2015-07-07T14:22:03.993 回答