1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| # A Windows service
import win32service
import win32event
import win32evtlog
import win32evtlogutil
import win32serviceutil
import win32process
import ConfigParser
import time, os, sys
from ftplib import FTP
class WinService (win32serviceutil.ServiceFramework):
_svc_name_ = "NomService"
_svc_display_name_ = "Nom Service affiché"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
# Evenement declenché lors de l'arret du service
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
# Evenement dont on se sert pour la boucle infinie
self.hService = win32event.CreateEvent(None, 0, 0, None)
self.log_type = "nom pour le journal des evts"
def SvcStop(self):
# Arret
win32evtlogutil.ReportEvent(self.log_type, 2, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message d'arret"])
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun (self):
# Pas d'initialisation
# Declenche l'evenement hService qui permet de passer dans
# en continu dans la fonction DoBatch ()
win32evtlogutil.ReportEvent(self.log_type, 1, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message de démarrage"])
win32event.SetEvent (self.hService)
# Boucle
while 1:
# Attend une demande d'arret ou la fin de la tempo
rc = win32event.WaitForMultipleObjects((self.hWaitStop,
self.hService),
0, win32event.INFINITE)
# Arrete le service
if rc==win32event.WAIT_OBJECT_0:
# Stop event
break
# Traitement
else:
# Mon service !
self.DoBatch ()
win32event.SetEvent (self.hService)
# Fin
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, 5000)
def DoBatch (self):
# C'est dans cette fonction que tu colle ton code. C'est ce qui sera exécuté par le service !
os.system("c:\go.bat")
pass
if __name__=='__main__':
win32serviceutil.HandleCommandLine(WinService) |
Partager