Arret services a l'arret de windows

Arret services a l'arret de windows - Win NT/2K/XP - Windows & Software

Marsh Posté le 24-10-2007 à 12:10:09    

hello tout le monde,
J'ai bricolé un service windows (qui pilote un périphérique) et tout fonctionne bien :
- quand je démarre le service (net start monservice) le périphérique démarre.
- quand j'arrête mon service (net stop monservice) le périphérique s'arrette.
 
Bon par contre quand j'arrête l'ordinateur, je pensais que windows arrêtait les services proprement avant de se couper mais il semblerait que ce ne soit pas le cas, du coup mon périphérique reste allumé  :jap:  
 
 
Ya pas un moyen de dire a windows de faire son boulot correctement ?

Reply

Marsh Posté le 24-10-2007 à 12:10:09   

Reply

Marsh Posté le 24-10-2007 à 12:16:25    

Que veux tu dire par "mon périphérique reste allumé" ?
Il reste allumé alors que le PC est eteint ?

Reply

Marsh Posté le 24-10-2007 à 12:20:12    

le périphérique dispose de sa propre alim.
Mon service envoie une commande au périphérique pour lui demander de s'arrêter proprement.
Cette commande est envoyé quand le service s'arrête (au moment du net stop par exemple).
Mais a l'arrêt de windows le service ne s'arrête pas proprement (et donc n'arrête pas mon periph)

Reply

Marsh Posté le 24-10-2007 à 12:34:59    

Par defaut, y a un timeout de 20 secondes avant que Windows decide de forcer un service à se fermer.
Essaye de le reduire.
Perso, je met entre 2 et 5 secondes, c'est bien suffisant
 
C'est dans le registre, au niveau de la valeur WaitToKillServiceTimeout
dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentcontrolSet\Control
 
Tu la passes à 2000 (pour 2 secondes) ou 5000 (pour 5 secondes)
Tu rebootes et c'est actif a la prochaine session

Reply

Marsh Posté le 24-10-2007 à 12:36:34    

2 sec c'est bien trop court, il risque d'avoir un plantage a la fermeture, 5 secondes c'est mieux.

Reply

Marsh Posté le 24-10-2007 à 13:22:58    

ca signifie qu'au bout de ce timeout (2/5sec), windows va arrêter proprement les services (dont le mien) avant de s'arrêter ?


Message édité par azubal le 24-10-2007 à 17:09:25
Reply

Marsh Posté le 24-10-2007 à 13:29:10    

non cette clé fait reference a tous les services, pas au tien particulièrement..... je ne connais pas la réponse a ton pb pour ma part.

Reply

Marsh Posté le 24-10-2007 à 17:09:57    

Euh oui, c'est ce que je voulais dire..
 
Bon, je testerai ce soir.
Merki :)

Reply

Marsh Posté le 27-10-2007 à 19:02:16    

C'est re moi...
Ca ne fonctionne pas.
Il faut que lorsque j'éteins mon PC, il fasse pareil qu'un "net stop monservice". :/

Reply

Marsh Posté le 06-11-2007 à 18:57:07    

Up :(

Reply

Marsh Posté le 06-11-2007 à 18:57:07   

Reply

Marsh Posté le 06-11-2007 à 19:03:42    

Tu peux toujours glisser un script de fermeture de windows dans la gpedit.msc (s'il s'agit d'une version 2000/xp professional bien entendu), indiquant un arrêt de Windows après qu'un net stop tonservice se soit correctement réalisé.


Message édité par Profil supprimé le 06-11-2007 à 19:04:28
Reply

Marsh Posté le 14-01-2008 à 09:00:47    

Je suppose que pour détecter la demande d'arrêt tu t'inscrit sur l'événement SERVICE_CONTROL_STOP. Il faut savoir que lors de l'arrêt du système, Windows n'envoie pas cet événement aux services, il leur envoie l'événement SERVICE_CONTROL_SHUTDOWN.
 
Pour le recevoir il faut signaler au système que tu veux le recevoir par un appel à SetServiceStatus. Exemple :
    ...
    serviceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN ;  
    ...
    SetServiceStatus (serviceStatusHandle, &serviceStatus) ) ;


Message édité par gotrunk le 14-01-2008 à 09:01:15
Reply

Marsh Posté le 14-01-2008 à 11:38:54    

Ahh, c'est exactement ca.
Merci à toi gotrunk.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed