Вызов CoCreateInstance во время запуска службы - PullRequest
2 голосов
/ 03 августа 2010

У меня есть служба Windows, которая делает несколько вызовов COM + во время инициализации.В некоторых системах эта служба Windows вызывает взаимоблокировку при запуске.

По крайней мере, одна служба или драйвер не удалось во время запуска системы

Проблема с вызовом CoCreateInstance во время запуска службы заключается в том, чтодля запуска могут потребоваться другие службы.И SCM не позволит другим службам запускаться, ожидая, пока текущая служба войдет в рабочее состояние.Решение состоит в том, чтобы обеспечить правильную настройку зависимостей службы при установке службы.См. http://support.microsoft.com/kb/258943

Но какие сервисные зависимости нужно указывать при работе в Windows Vista / 2008/7?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Другое решение состоит в том, чтобы вообще не инициализировать ваши COM-объекты во время логики запуска службы.Пусть логика запуска создаст отдельный рабочий поток или, по крайней мере, отложенный / поставленный в очередь запрос к себе, чтобы инициализация COM могла быть выполнена после того, как SCM был освобожден для запуска других служб при необходимости.

2 голосов
/ 09 мая 2015

Простое решение состоит в том, чтобы настроить службу COM-приложения так, чтобы служба запуска была установлена ​​на «Автоматический (отложенный запуск)» (DelayedAutoStart). Тогда он не будет частью «основных» служб, необходимых для запуска Windows. Он был представлен в Windows 2008.

...