在服务启动期间调用CoCreateInstance

时间:2010-08-03 15:33:28

标签: c++ com windows-services

我有一个Windows服务,它在初始化期间进行多次COM +调用。在某些系统上,此Windows服务会在启动期间导致死锁。

  

系统启动期间至少有一个服务或驱动程序失败

在服务启动期间调用CoCreateInstance的问题是它可能需要其他服务才能启动。并且SCM在等待当前服务进入运行状态时不允许其他服务启动。解决方案是确保在安装服务时正确配置服务依赖关系。见http://support.microsoft.com/kb/258943

但是在Windows Vista / 2008/7上运行时应该指定哪些服务依赖项?

2 个答案:

答案 0 :(得分:3)

另一种解决方案是在服务启动逻辑期间根本不初始化COM对象。让启动逻辑创建一个单独的工作线程,或者至少是一个延迟/排队的请求,这样就可以在SCM被释放后根据需要启动其他服务来完成COM初始化。

答案 1 :(得分:2)

简单的解决方案是将COM应用程序服务配置为将服务启动设置为"自动(延迟启动)" (DelayedAutoStart)。那么它就不会成为"必要的" Windows运行所需的服务。它是在Windows 2008中引入的。