Служба Windows C # застряла при вызове devcon - PullRequest
0 голосов
/ 02 ноября 2018

Я создал службу Windows для инициализации PCI-устройства во время загрузки Windows. Для этого служба должна вызвать Devcon.exe, который загружает соответствующий драйвер из локального INF-file. Инструмент «Devcon.exe» вызывается с помощью асинхронного процесса (с событиями), который захватывает перенаправленный StandardOutput в событии и анализирует его выходные данные. Это прекрасно работает, если никакой другой сервис Windows не зависит от моего сервиса.

Но если другой сервис зависит от моего сервиса (также при запуске зависимых сервисов вручную - что означает полностью инициализированную систему без входа в среду загрузки), «Devcon.exe» застревает, что приводит к зависанию моего сервиса Windows. Как попытка обходного пути, я перепроектировал мой сервис Windows и теперь использовал C ++ - функцию UpdateDriverForPlugAndPlayDevices (обернутую в C # с помощью PInvoke) для загрузки моего драйвера. Кроме того, я использую флаг INSTALLFLAG_NONINTERACTIVE, поскольку службы Windows не имеют доступа к пользовательскому интерфейсу.

К сожалению, теперь у меня такое же поведение - если мой сервис вызывается без какой-либо зависимости, все работает отлично, но , если другой сервис Windows зависит от моего сервиса, функция UpdateDriverForPlugAndPlayDevices также зависает .

Если я вызываю любой другой исполняемый файл из моей службы Windows, он прекрасно работает с зависимостью от другой службы и без нее. Кроме того, я создал зависимость «фиктивной службы» от своей службы Windows, которая вводит запись в журнал при запуске просто для того, чтобы убедиться, что другая служба не вызывает проблем.

Кажется, это общая проблема Windows ! Есть ли известное решение этой проблемы? Или есть какие-нибудь предложения о том, как заставить это работать в любом случае?

...