![](/img/trans.png)
[英]Application hanging during CoCreateInstance of .NET-based COM object
[英]Calling CoCreateInstance during service startup
我有一个Windows服务,该服务在初始化期间进行了多个COM +调用。 在某些系统上,此Windows服务在启动期间导致死锁。
系统启动期间至少有一项服务或驱动程序发生故障
服务启动期间调用CoCreateInstance的问题在于,它可能需要其他服务才能启动。 并且SCM在等待当前服务进入运行状态时将不允许其他服务启动。 解决方案是确保在安装服务时正确配置了服务依赖项。 请参阅http://support.microsoft.com/kb/258943
但是,在Windows Vista / 2008/7上运行时,应该指定哪些服务依赖项?
另一个解决方案是在服务启动逻辑期间完全不初始化COM对象。 让启动逻辑创建一个单独的工作线程,或者至少创建一个对其自身的延迟/排队的请求,以便可以在释放SCM以根据需要启动其他服务之后完成COM初始化。
简单的解决方案是将COM应用程序服务配置为将服务启动设置为“自动(延迟启动)”(DelayedAutoStart)。 这样,它将不会成为Windows运行所需的“必需”服务的一部分。 Windows 2008引入了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.