这正是NotifyServiceStatusChange函数的用途。文档指出它:启用应用程序在指定服务被创建、删除或其状态更改时接收通知。我不确定是否有等效的托管代码事件,但使用P/Invoke很容易获得这个函数。但请注意,此函数仅在Windows Vista及更高版本中可用。如果您需要针对早期版本进行目标设置,则可以在此问题的答案之一中找到解决方案。
使用NotifyServiceStatusChange需要管理员权限。服务控制器确实有一个ServiceController.WaitForStatus,可以设置为监听更改并创建事件。虽然不太美观,但不需要管理员权限,因此在某些情况下可能会有用。