[python-win32] Re: How to build a Windows service using win32?

Roger Upole rwupole at msn.com
Wed Mar 7 13:20:26 CET 2007


Gregor Mosheh wrote:
> I'm trying to write a Win32 service. The following is straight from Python
> Programming on Win32 and it doesn't work. Is that book out of date; is
> there a new way to do services? I searched Google for hours trying to find
> any other method, and have been beating on this one for 5 more hours.
> 
> The present error is:
> 
> C:\Tester>python tester.py debug
> Debugging service Tester - press Ctrl+C to stop.
> Error 0xC0000004 - Python could not import the service's module
> 
> <type 'exceptions.ImportError'>: No module named service
> 
> 
> The code is:
> 
> import win32serviceutil, win32service, win32event
> 
> class Service(win32serviceutil.ServiceFramework):
>    _svc_name_         = "EDMS-to-CG"
>    _svc_display_name_ = "EDMS-to-CG Syncer"
>    _svc_description_  = "Uploaded the EDMS database to Cartograph"
> 
>    def __init__(self, args):
>        win32serviceutil.ServiceFramework.__init__(self, args)
>        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
> 
>    def SvcStop(self):
>        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>        win32event.SetEvent(self.hWaitStop)
> 
>    def SvcDoRun(self):
>        pausetime = 60 * 1000
>        while True:
>            stopsignal = win32event.WaitForSingleObject(self.hWaitStop,
> pausetime)
>            if stopsignal == win32event.WAIT_OBJECT_0: break
>            self.runOneLoop()
> 
>    def runOneLoop(self):
>        import servicemanager
>        servicemanager.LogInfoMsg('Running')
> 
> win32serviceutil.HandleCommandLine(Service)

The HandleCommandLine is getting executed within the service itself,
but it should only get executed when configuring the service.
Try this instead:

if __name__=='__main__':
    win32serviceutil.HandleCommandLine(Service)

          hth
                Roger



More information about the Python-win32 mailing list