[python-win32] pywin32 services

Tim Roberts timr at probo.com
Tue Jul 20 18:17:32 CEST 2010

 Michael Mileusnich wrote:
> My apologies I was incorrect.  fname is being set to C:\Program
> Files\HQSystem\bin\hqmonitor.exe but alas the directory was empty.  I
> corrected this however I still cannot get my services to start. 
> Currently I use an example that invokes
> win32serviceutil.HandleCommandLine(MyService) but all that seems to do
> (on my python trace program) is give back the usage.  If I try to
> 'start' the service I get my service was unable to respond in a timely
> fashion error.

Well, wait a minute.  How is that possible?  How could "fname" get the
wrong path?  It was fetching the program's name from sys.argv[0], which
it should have fetched from the command line that started the service. 
Did you move the directory after you did the original service creation? 
Remember that the path to your service is stored in the registry.  I
hope it's obvious that this path MUST be correct if you plan to have
Windows start the service on its own.

> Correct my I am wrong but all Windows looks for is the SvcDoRun?

No, that's not right.  You need to remember the pieces that are involved
here.  Windows doesn't have any clue about Python.  It's just running
your service as a standard executable.  SvcDoRun is just a Python
function, which happens to be called by the PyWin32 service framework. 
Windows services work by receiving messages from the operating system --
messages that tell the service what to do.  There are messages for
start, stop, and pause, among others.  In response to the "start"
message, the Python framework will eventually call SvcRun, which then
calls your SvcDoRun.

Just because Python makes it easy, that doesn't change the way services
work.  The registry must be correct, and your service must operate like
a normal executable.

Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.

More information about the python-win32 mailing list