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

Déploiement/Installation Python Discussion :

mettre en service


Sujet :

Déploiement/Installation Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut [résolu] mettre en service
    Salut à tous,

    J'ai fait un petit programme python, que j'ai ensuite compilé avec py2exe pour en faire un .exe.

    Lorsque je lance mon .exe, il n'y a aucun problème, mon appli fonctionne normalement.

    Maintenant, j'utilise InstallShield pour déployer mon appli, et je voudrais créer un service qui lance mon appli.
    Le service est bien créé mais lorsque je veux démarrer ce service, on me dit que le service n'a pas démarré assez vite.

    Je suis aller dans la base de registre est j'ai modifier cette entrée pour que le service lance une autre appli, et celle-ci se lance.

    J'en déduis que le service est créé correctement par InstallShield, mais qu'il me manque surement quelque chose dans mon programme.

    Est-ce que quelqu'un a une idée ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    Pourquoi ne pas créer directement ton service en python (sans utiliser installshield ??)

    Avec la lib Win32 c'est pas dur. Tu developpe, tu crée ton .exe avec py2exe et tu lance tonexe.exe -install. Et voilu ton service est créé.
    Attention, il faut mettre --service=NomDeTaClasse. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    python setup.py py2exe --service=WinService
    Pour la classe ci-dessous

    Je te met en exemple un service en Python que j'ai fait au boulot, sans la partie travail bien sur, tu vas vite comprendre :

    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
    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 !
            pass
     
    if __name__=='__main__':
        win32serviceutil.HandleCommandLine(WinService)
    Voilu, en remplacant les strings qui vont bien, et en collant ton code dans DoBatch, ça devrais marcher sans pb.

    Bon courage !!!!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut
    Merci beaucoup, je vais essayer ça de suite

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut
    Bonjour,

    Ok, j'ai créé un fichier "prog.py" avec ton exemple, puis j'ai remplacé les string par les miennes et dans la fonction DoBatch, j'ai mis mon code.

    Mon problème maintenant c'est que j'avais un fichier "setup.py" pour créer mon .exe avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setup(windows=["prog.py"])
    ensuite sous dos, je tapais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    python setup.py py2exe
    Mon .exe était créé.

    Mais maintenant, il faut que je mette quoi dans setup.py ?
    Et comment dois-je lancer py2exe ?

    Merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    Je considère que tu as garder le même nom de class (WinService). Si ce n'est pas le cas, remplace le :o)

    Pour créer ton exe, tu met ça dans le setup.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    from distutils.core import setup
    import py2exe
     
    setup(name='WinService',
          description="A Windows NT Service ...",
          version='1.0.0',
          scripts=['prog.py'])
    Ensuite tu appel py2exe. Attention, il faut lui préciser que c'est un service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    python setup.py py2exe --service=WinService
    Voila, maintenant tu doit avoir ton exe avec tout ce qui va avec dans ./dist/prog/, il ne te reste plus qu'a l'installer.
    Pour ce faire, tu appel ton exe avec -install :
    C'est bon, maintenant ton service figure dans les services Windows. Tu n'as plus qu'a le lancer, le programmer, enfin faire ce que tu veux !!!!

    Pour le déinstaller, c'est :
    Bon courage, et tiens nous au courant !!!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut
    Merci pour ces explications.

    Lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    python setup.py py2exe --service=WinService
    Il me répond :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error: option --service not recognized

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Par défaut
    Tu doit avoir une version trop ancienne de py2exe, ou alors plus récente que la mienne.
    Je suis en v0.3.1 pour python 2.2 et c'est la première version qui peux créer des services.
    Vérifie de ce coté !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut
    Ok, j'ai la version 0.5, donc je vais aller regarder du côté de la doc ...

    Merci

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 9
    Par défaut
    J'ai trouvé cet exemple qui fonctionne bien :

    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
     
    class Target:
        def __init__(self, **kw):
            self.__dict__.update(kw)
            # for the versioninfo resources
            self.version = "0.5.0"
            self.company_name = "No Company"
            self.copyright = "no copyright"
            self.name = "py2exe sample files"
     
     
    myservice = Target(
        # used for the versioninfo resource
        description = "A sample Windows NT service",
        # what to build.  For a service, the module name (not the
        # filename) must be specified!
        modules = ["prog"] #sans .py
        )
     
     
    setup( service = [myservice] )
    et voilà, ensuite on lance le .exe avec l'extension -install et le tour est joué.


    Merci beaucoup de ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre en service Samba 4 !
    Par Fred246 dans le forum SUSE
    Réponses: 1
    Dernier message: 03/05/2010, 09h17
  2. Réponses: 3
    Dernier message: 26/05/2009, 12h53
  3. [Inno Setup] Mettre un service en auto
    Par Memel40 dans le forum Outils
    Réponses: 10
    Dernier message: 28/11/2008, 15h13
  4. Mettre en automatique un service dans un batch
    Par log1c dans le forum Windows
    Réponses: 1
    Dernier message: 02/12/2005, 12h23
  5. Réponses: 7
    Dernier message: 24/11/2004, 09h45

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