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

Windows Discussion :

Service windows - Temps de latence lors de l'arrét


Sujet :

Windows

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut Service windows - Temps de latence lors de l'arrét
    Bonjour,

    Je suis en train de développer un service windows faisant tourner un application de type ‘Serveur’.

    Tout fonctionne correctement, mais je bloque tout de même sur un problême concernant un temps de latence entre le passage à l’état SERVICE_STOPPED et l’arrét effective du service.

    En effet, lorque mon service passe à l’état SERVICE_STOPPED, il continue à répondre aux requètes de mon application client pendant plusieurs secondes.

    Selon vous, Cela est-il normal, ou bien est-ce caractéristique d’une erreur dans mon code?

    Voici ma procedure d’arrét du service :

    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
    void TSFKService::Stop(void){
      SC_HANDLE schSCManager = NULL;
      if (!OpenServiceManager(schSCManager,SC_MANAGER_CONNECT))                     //Connection au service manager
        return;
    
      SC_HANDLE schService = NULL;
      if (!OpenService(schService,schSCManager,SERVICE_STOP_PENDING|SERVICE_STOP|SERVICE_QUERY_STATUS))  //Connection au service
        return;
    
      if (::ControlService(schService,SERVICE_CONTROL_STOP,&ServiceStatus))         //Modification de l'état du service
      {
        AddServiceInfo("Stopping Service");                                         //I18N
        ::Sleep(1000);
        while (::QueryServiceStatus(schService,&ServiceStatus)){
          if (ServiceStatus.dwCurrentState == SERVICE_STOP_PENDING){                //Attente de l'arrét total du service
            AddServiceInfo(".");
            ::Sleep(1000);
          }
          else
            break;
        }
        if (ServiceStatus.dwCurrentState == SERVICE_STOPPED)
         AddServiceInfo("Service stopped.");                                        //I18N
        else
         AddServiceInfo("Unabled to stop Service");                                 //I18N
      }
      ::CloseServiceHandle(schService);                                             //fermeture des connections
      ::CloseServiceHandle(schSCManager);
    
    }
    Merci d'avance pour votre avis.

    Cordialement,
    Benjamin

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonjour,
    J'ai trouvé le problème.
    J'avais oublié de libérer mon Handle de 'close'.
    Mon temps de latence correspondait au temps maximal d'attente fournie à mon appel à WaitForSingleObject.
    Benjamin

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2014, 14h45
  2. Réponses: 4
    Dernier message: 09/06/2010, 17h44
  3. pb lors du lancement auto d'un Service windows
    Par key31 dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/08/2007, 14h45
  4. Pb lors du lancement d'un service windows
    Par Med80 dans le forum Général Dotnet
    Réponses: 7
    Dernier message: 24/07/2007, 13h40

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