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

VBScript Discussion :

Retour sur Vérifier si un processus devient inactif et avertir si c'est le cas


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Poste occupé
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Poste occupé

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 6
    Points
    6
    Par défaut Retour sur Vérifier si un processus devient inactif et avertir si c'est le cas
    Débutant en VBScript j'aurai souhaité si possible un commentaire plus détaillé sur la partie Loop du script "CheckMyProcessActif" que je rappelle
    et concernant la version avec fichier journal ajouté qui correspond bien à mon application dans quel répertoire doit on trouver le fichier log?

    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
    Option Explicit
    Dim ws,MyProcess
    Set ws = CreateObject("WScript.Shell")
    MyProcess = "Calc.exe"
    Do
    'On vérifie si le processus de la calculatrice ne tourne pas alors
    'on l'exécute
        If CheckProcess(MyProcess) = False then 
            ws.run MyProcess
        else
    'On fait une pause d'une minute et on continue dans notre boucle pour vérifier
    'la présence ou non de notre processus (Dans notre cas = Calc.exe)
            Pause(1)
        End if
    Loop
    '***************************************************************************
        Function CheckProcess(MyProcess)
            Dim strComputer,objWMIService,colProcessList
            strComputer = "."
            Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
            Set colProcessList = objWMIService.ExecQuery _
            ("Select Name from Win32_Process WHERE Name LIKE '" & MyProcess & "%'")
            If colProcessList.count > 0 then
                CheckProcess = MyProcess & " is running"
                CheckProcess = True
        MsgBox"is running"
     
            else
                CheckProcess = MyProcess & " is not running"
                CheckProcess = False
        MsgBox"is not running"
            End if
            Set objWMIService = Nothing
            Set colProcessList = Nothing
        End Function
    '*****************************************************************************
        Sub Pause(NSeconds)
            Wscript.Sleep(NSeconds*1000*60)
        End Sub  
    '*********

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Bonjour,

    La parti Do Loop semble déjà être commenté ?

    Sinon quelques petites remarques et idées, si tu le permet :

    - La routine "Sub Pause" semble transmettre des secondes (nom du paramètre NSeconds) mais se sont des minutes.

    - Rien ne sert de définir 2 fois de suite "CheckProcess", ça sera la dernière valeur qui restera.
    CheckProcess = MyProcess & " is running"
    CheckProcess = True

    et
    CheckProcess = MyProcess & " is not running"
    CheckProcess = False


    - Problème d'indentation de la Function et du Sub.

    - Les commentaires doivent informer sur ce que fait la ou les lignes du dessous aussi j'aurai plutôt fait comme ceci

    Code vbs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ' Boucle infini
    Do
        ' Si le processus de la calculatrice n'existe pas 
        If CheckProcess(MyProcess) = False Then
            ' On lance le processus de la calculatrice
            ws.run MyProcess
        ' Sinon (si le processus de la calculatrice existe)
        Else
            ' On fait une pause d'une minute
            Pause(1)
        End if
    Loop

    - Je n'aurai pas mis de MsgBox dans la Function CheckProcess mais plutôt dans ma boucle. Le mieux étant que les Function/Sub fasse uniquement ce pour quoi elle sont faite.

    - Ce n'est pas une vérification exacte, tu ne vérifie pas si le processus calc existe, mais plutôt si un processus commence par calc (MyProcess & "%'").

  3. #3
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    La fonction MsgBox est bloquante et attend toujours une action pour permettre au script de continuer.

    Moi j'aurais utilisé la méthode PopUp de l'objet WshShell(ici déclaré WS) ; je mettrais une petite valeur pour la durée d'attente et une condition pour pouvoir arrêter le script quand je le veux.

    Voici une esquisse du
    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
    Option Explicit
        Dim WS, MyProcess, intReturn
        Set WS = CreateObject("WScript.Shell")
     
        MyProcess = "Calc.exe"
        Do
        'On vérifie si le processus de la calculatrice ne tourne pas alors
        'on l'exécute
            If Not CheckProcess(MyProcess) Then 
                intReturn = WS.PopUp(MyProcess & " is not running", 2, MyProcess, 1)
                ' Si l'utilisteur clique sur le bouton "Annuler", on quitte Wscript sans lancer le processus
                ' Si aucune action n'a été entreprise ou qu'on cliqué sur OK, le script continue et lance le processus
                If intReturn = 2 Then Wscript.Quit
                WS.Run MyProcess
            Else
           'On fait une pause d'une minute et on continue dans notre boucle pour vérifier
           'la présence ou non de notre processus (Dans notre cas = Calc.exe)
                Pause(1)
            End If
        Loop
    '************************************************
       Function CheckProcess(MyProcess)
          Dim strComputer,objWMIService,colProcessList
          strComputer = "."
          Set objWMIService = GetObject("winmgmts:" _
          & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
          Set colProcessList = objWMIService.ExecQuery _
          ("Select Name from Win32_Process WHERE Name = '" & MyProcess & "'")
          If colProcessList.count > 0 Then
             CheckProcess = True
            ' MsgBox"is running"
          Else
            CheckProcess = False
          End If
          Set objWMIService = Nothing
          Set colProcessList = Nothing
       End Function
    '**************************************************
        Sub Pause(nMinutes)
            Wscript.Sleep(nMinutes*1000*60)
        End Sub  
    '**************************************************
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/03/2017, 11h30
  2. Réponses: 3
    Dernier message: 10/05/2010, 20h19
  3. retour sur un processus shell en suspend
    Par velight dans le forum Linux
    Réponses: 2
    Dernier message: 08/05/2009, 12h08
  4. Réponses: 2
    Dernier message: 08/09/2006, 13h14

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