Page 1 sur 1

[R] Demande de creation d'une boucle pour arrêt service

Posté : jeu. 04 sept. 2014 08:38
par Sydneysyd
Bonjour à tous,

Je me creuse la tête mais je suis un peu perdu avec la commande pour démarrer et arrêter un service.

Je voudrais faire une boucle qui dit que si le service untel existe, alors on l'arrete et on sort de la boucle

Je pensais à cela :

Code : Tout sélectionner

While 1
If Not service untel Then ExitLoop
Net stop service untel
WEnd
 
C'est au niveau des commandes que je suis perdu, car j'ai beau chercher sur le forum je ne trouve rien

Merci

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 08:55
par jchd
A quoi sert la boucle ?

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 08:58
par Sydneysyd
C'est pour un patch à appliquer en fait, donc le service peut ne pas exister sur certaines machines, d'où la boucle :)

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 09:35
par jguinch
En fait, tu veux arrêter un service s'il est en cours d'exécution, c'est ça ?

Code : Tout sélectionner

$sServiceName = "RemoteRegistry"
$oShell=ObjCreate("shell.application")

if $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStop($sServiceName,false)
; if NOT $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStart($sServiceName,false)
ou WMI : http://www.autoitscript.com/forum/topic ... ?p=1127678
ou l'API via un UDF : http://www.autoitscript.com/forum/topic ... toit-code/

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 14:37
par Sydneysyd
Oui, mais le souci est que ce service peut ne pas exister sur certains postes, donc selon ton code, comment je fais pour le redémarrer automatiquement ?

La boucle me paraissait pas mal...

Il n'y a pas un code en autoit ?

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 15:56
par jguinch
Sydneysyd a écrit :ce service peut ne pas exister sur certains postes, donc selon ton code, comment je fais pour le redémarrer automatiquement ?
Avoue que c'est un peu flou quand-même :roll: Tu veux démarrer un service qui n'existe pas...

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 17:15
par Sydneysyd
Non c'est pas flou :)

Je veux savoir s'il le service untel existe
Si c'est le cas on l'arrête
Puis on le redemarre une fois que c'est terminé.

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 17:19
par orax
:?: Et la boucle ? Elle sert à parcourir tous les postes ?

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 17:25
par Sydneysyd
Non la boucle c'est pour savoir si le service existe et dans ce cas on l'arrete et on sort de la boucle pour continuer le programme
Si le service n'existe pas on sort directement de la boucle

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 17:52
par jchd
Argh !

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 18:17
par orax
J'ai demandé ça puisque je ne vois pas l'intérêt ta boucle.

Une fois qu'il aura été arrêté et que le patch aura été appliqué, tu peux le redémarrer avec

Code : Tout sélectionner

$oShell.ServiceStart($sServiceName,false)
Ou sinon, en reprenant une partie du code de jguinch (dans le lien), tu devrais pouvoir vérifier si le service existe bien sur le poste (avec _WMIService_Get) :
► Afficher le texte

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 20:45
par jguinch
Au lieu d'attendre que le service soit créé, pourquoi ne pas attendre simplement la fin de l'installation du patch ?

Les fonctions que j'ai posté sur le forum US ont la particularité d'être très lentes.
Mettre _WMIService_Get() dans une boucle, c'est possible mais un peu lent.
Un truc tout bête qui permet de savoir si un service existe est de regarder directement dans la base de registre (en se basant sur le nom court du service) dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services

Code : Tout sélectionner

$oShell=ObjCreate("shell.application")
$sServiceName = "AdobeFlashPlayerUpdateSvc"

; On arrête le service s'il est lancé (s'il n'existe pas, ça fait rien)
if $oShell.IsServiceRunning($sServiceName) then $oShell.ServiceStop($sServiceName,false)

; On lance l'installation du patch....
; ...

; On attend que le service soit créé
While RegRead("HKLM\SYSTEM\CurrentControlSet\services\" & $sServiceName, "DisplayName") <> "" 
    Sleep(100)
WEnd

; Et on lance le service
$oShell.ServiceStart($sServiceName,false)
 

Re: [...] Demande de creation d'une boucle pour arrêt servic

Posté : jeu. 04 sept. 2014 23:07
par Sydneysyd
C'est parfait !
Merci beaucoup ^^