<p>What is the best way to actively monitor if a .NET Windows service is still running (e.g not hung)?  The service needs to periodically respond to events raised by a timer.</p>

<p>Thanks</p>

<p>Jon</p>

"Not hung" is always a hard condition to definitively detect, and will depend on the details of your service.
In general any form of interprocess communication can be used.  One simple approach is to create a
named
shared memory mapping and simply write information to it periodically from your service.  Another process can monitor the shared memory and see if its state stops changing.
The advantage of this approach is that you can extend the shared memory block to include other diagnostics which may help diagnose any issues.