Currently there seems to be no way to use the automatic service recovery options provided by the service manager in case of a failure in the service. According to http://msdn.microsoft.com/en-us/library/ms685939%28VS.85%29.aspx , a service is considered failed if it didn't report a status of SERVICE_STOPPED before terminating.
When using the win32serviceutil.ServiceFramework the SERVICE_STOPPED status is always reported to the service manager (at the end of the service_main() function in PythonService.cpp) and there is no way to prevent this. One way to support this is by checking for a SystemExit exception with a code != 0 when returning from the "SvcRun" method in the service_main() function and not report the SERVICE_STOPPED status in that case. One can thus trigger the recovery by calling "exit(1)".
Dieter G ( dgovaerts ) - 2012-11-21 01:34:27 PST