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 :
Merci d'avance pour votre avis.
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); }
Cordialement,
Benjamin
Partager