如何从Topshelf服务钩住服务控制处理程序

如何从Topshelf服务钩住服务控制处理程序,topshelf,Topshelf,我有一个非常成功地使用Topshelf的现有Windows服务 我现在需要让服务在特定USB设备与机器连接/断开时接收通知 我在托普舍夫看不到任何能让我这么做的东西。但我相信有一种方法可以使用Win32 API实现,比如ServiceControlHandlerEx和带有设备_NOTIFY _SERVICE _HANDLE选项的RegisterDeviceNotification 使用这些Win32 API会干扰Topshelf吗?据我所知,Topshelf包装了服务控制处理程序本身,所以我的服

我有一个非常成功地使用Topshelf的现有Windows服务

我现在需要让服务在特定USB设备与机器连接/断开时接收通知

我在托普舍夫看不到任何能让我这么做的东西。但我相信有一种方法可以使用Win32 API实现,比如ServiceControlHandlerEx和带有设备_NOTIFY _SERVICE _HANDLE选项的RegisterDeviceNotification

使用这些Win32 API会干扰Topshelf吗?据我所知,Topshelf包装了服务控制处理程序本身,所以我的服务也尝试做同样的事情,可能会导致一些问题

更新
可以在基于Topshelf的服务中挂接来自服务控制处理程序的设备通知。有关详细信息,请参阅。非常感谢Chris Patterson的帮助。

Topshelf不会干扰您调用这些Win32 API。

谢谢Travis。您知道从哪里可以获得与ServiceBase.servicehold等效的服务吗?目前我能看到的唯一方法是从ServiceBase获得我的服务,但这是Topshelf为我处理的事情。我需要服务句柄,以便将其传递给RegisterDeviceNotification。对不起,这个愚蠢的问题。使用
var serviceController=newservicecontroller(“ServiceNameHere”)
然后使用
serviceController.ServiceHandle
属性。这对我来说很简单。