IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Création d'un service windows


Sujet :

Python

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 160
    Points
    160
    Par défaut Création d'un service windows
    Bonjour,
    je suis acteullement sur le developpement d'un script python me permettant d'installer un service windows, par la suite mon porgramme vérifira si le service est lancé ou non.

    J'a déjà trouvé pas mal de documentations sur le module win32, mais je n'ai rien de concret. Je passe par vous, pour savoir si vous avez déjà essayer de faire ce genre de script ou si vous avez des liens.

    Merci

    Thomas

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 160
    Points
    160
    Par défaut
    Merci pour le lien,

    Je viens de tester le code :

    VOilà mon setup.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    from distutils.core import setup 
    import py2exe 
     
    class Target: 
    	def __init__(self, **kw): 
    		self.__dict__.update(kw) 
    		# for the versioninfo resources 
    		self.version = "1.0" 
    		self.company_name = "My Enteprise" 
    		self.copyright = "No copyright" 
    		self.name = "Mon service" 
     
     
    myservice = Target(
        # used for the versioninfo resource 
        description = "mon service" 
        # what to build.  For a service, the module name (not the 
        # filename) must be specified! 
        modules = ["smd2"] #sans .py 
        ) 
     
     
    setup( service = [myservice] )
    mon code smd2.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    # 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_ = "SMD" 
        _svc_display_name_ = "SMD"
     
        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 = "tmp.log" 
     
        def SvcStop(self): 
            # Arret 
            win32evtlogutil.ReportEvent(self.log_type, 2, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=[ _svc_display_name_ + " STOPPED"]) 
            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=[ _svc_display_name_ + " STARTED"]) 
            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): 
    	print " Le service fonctionne correctment"
     
    if __name__=='__main__': 
        win32serviceutil.HandleCommandLine(WinService)
    La compilation avec py2exe fonctionne correctement. J'ai bien le .exe qui est crée!
    Lorsque que je fais :
    cela se met bien dans la liste de mes services

    Par contre quand je veux le démarrer :
    smd2.exe -auto
    j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    D:\certification\service_SMD\dist>smd2.exe -auto
    Connecting to the Service Control Manager
    Traceback (most recent call last):
      File "boot_service.py", line 170, in ?
    pywintypes.error: (1063, 'StartServiceCtrlDispatcher', "Le processus de service n'a pas pu se connecter au contr\xf4leur de service.")
    je ne comprend pas d'où viens l'erreur

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Points : 160
    Points
    160
    Par défaut
    J'ai réussi à contouner l'erreur en tapant NET START "MonService" pour le lancer.

    Mon service lance un fichier bat, j'ai un autre soucis, car lorsque je liste mes processus, je vois qu'il y déclenche une multitude de CMD.exe. Ceci est surement du a la boucle while du programme.

    Je me trompe ou non?

Discussions similaires

  1. [Débutant] Création d'un service windows
    Par Sytchev3 dans le forum C#
    Réponses: 2
    Dernier message: 26/06/2014, 11h16
  2. Réponses: 6
    Dernier message: 16/11/2012, 14h39
  3. Réponses: 2
    Dernier message: 23/11/2007, 11h52
  4. Création d'un service Windows
    Par sandre dans le forum C#
    Réponses: 2
    Dernier message: 26/07/2007, 02h26
  5. Création d'un service windows
    Par Tango dans le forum Windows
    Réponses: 2
    Dernier message: 10/04/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo