Как подключить обработчик управления сервисом к сервису Topshelf

У меня есть существующая служба Windows, которая очень успешно использует Topshelf.

Теперь мне нужно, чтобы служба получала уведомления, когда определенные USB-устройства подключаются / отключаются к / от машины.

Я не вижу в Topshelf ничего, что позволило бы мне это сделать. Но я считаю, что есть способ сделать это с помощью Win32 API, таких как ServiceControlHandlerEx и RegisterDeviceNotification, с параметром DEVICE_NOTIFY_SERVICE_HANDLE.

Будет ли использование этих Win32 API мешать работе Topshelf? Насколько я понимаю, Topshelf обертывает сам обработчик управления службой, поэтому моя служба, пытающаяся сделать то же самое, может вызвать некоторые проблемы?

Обновление: можно подключать уведомления устройства от обработчика управления службами в службе на основе Topshelf. Подробнее см. образец проекта. Большое спасибо Крису Паттерсону за его помощь.


person Jack Hughes    schedule 20.09.2013    source источник


Ответы (1)


Topshelf не будет мешать вам вызывать эти Win32 API.

person Travis    schedule 20.09.2013
comment
Спасибо, Трэвис. Вы знаете, где я могу получить эквивалент ServiceBase.ServiceHandle? Единственный способ, которым я могу это получить на данный момент, - это получить мой сервис из ServiceBase, но это то, о чем Topshelf позаботится за меня. Мне нужен дескриптор службы, чтобы я мог передать его в RegisterDeviceNotification. - person Jack Hughes; 20.09.2013
comment
Простите, глупый вопрос. Используйте var serviceController = new ServiceController("ServiceNameHere");, затем используйте свойство serviceController.ServiceHandle. - person Jack Hughes; 20.09.2013
comment
Что ж, с моей стороны это было легко. - person Travis; 20.09.2013