I used this script to run a conversion service with Python on Windows. I stripped it down, so that others can use it for their needs.
Install the script from the windows shell:
>>python WindowsService.py install
And start it by:
>>python WindowsService.py start
import win32serviceutil
import win32evtlogutil
import win32event
import win32service
import win32com.client
import pywintypes
import os
import time
import sys
import pythoncom
from datetime import datetime
import string
import win32gui
class WindowsService(win32serviceutil.ServiceFramework):
_svc_name_ ="WindowsService"
_svc_display_name_ = "Service short desc"
_svc_description_ = "Service long desc"
def __init__(self, args):
# Service Implementation
win32serviceutil.ServiceFramework.__init__(self, args)
#self.stopevent = threading.Event()
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
self.overlapped = pywintypes.OVERLAPPED()
self.overlapped.hEvent = win32event.CreateEvent(None,0,0,None)
# Start COM application here
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
self.globalServerRoot = [self.ret,self.serverRoot,int(self.serverPort)]
def SvcDoRun(self):
import servicemanager
# Start and write to eventlog
interval = 1000 # loop interval 1000 milliseconds
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
while True:
# do something interesting here
win32evtlogutil.ReportEvent(self._svc_display_name_,servicemanager.PYS_SERVICE_STOPPED,0,servicemanager.EVENTLOG_INFORMATION_TYPE,(self._svc_name_, ""))
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# Do stop-actions with application here
# report to SCM, that application is beeing stopped
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
win32event.SetEvent(self.hWaitStop)
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(WindowsService)