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 XP Discussion :

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


Sujet :

Windows XP

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Vérifier si un processus devient inactif et avertir si c'est le cas
    Bonjour.

    Y a-t-il un programme qui me permettrait de redémarrer automatiquement une application lorsqu'il n'est plus dans les processus Windows?

    C'est que j'ai une application qui plante à l'occasion et j'ai besoin de le redémarrer après plantage.

    Mon application va démarrer dans "démarrage" lorsque Windows démarre en "Utilisateur Limité" mais il démarre "en tant qu'administrateur" à partir d'un fichier bat.

    de l'aide me serait utile. Merci.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Voici un exemple vite fait en vbscript pour vérifier si le processus de la calculatrice tourne ou non.
    CheckMyProcessActif.vbs
    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
    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
            else
                CheckProcess = MyProcess & " is not running"
                CheckProcess = False
            End if
            Set objWMIService = Nothing
            Set colProcessList = Nothing
        End Function
    '*****************************************************************************
        Sub Pause(NSeconds)
            Wscript.Sleep(NSeconds*1000*60)
        End Sub  
    '*****************************************************************************

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par hackoofr Voir le message

    Voici un exemple vite fait en vbscript pour vérifier si le processus de la calculatrice tourne ou non.
    CheckMyProcessActif.vbs
    Merci pour votre solution.

    Je ne pourrai pas m'en servir vu que je bloque tout script et VBS en fait parti.

    Il me faut une solution comme un programme qui vérifie l'état de mes processus
    et dès que l'application débarque, qu'il soit redémarré.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Il y a quoi dans le fichier.bat ?
    Si vous pouvez nous poster son code et

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Une simple commande du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    runas /user:PC\compte "C:\application.exe"
    J'ai besoin de vérifie si "application.exe" est dans le processus et que s'il n'y est plus de le relancer.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    J'ai fait ma petite recherche de ma part et j'ai trouvé cette solution : [Batch] Vérifier si un processus est lancé ou non ?
    Donc à tester chez vous

  7. #7
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut Une autre solution en Vbscript qui est converti en exécutable .exe

    J'ai testé aussi cette solution en vbscript qui marche 5/5 chez moi
    Donc, on peut facilement faire une conversion du fichier écrit en vbscript vers un exécutable.exe avec l'éditeur VbsEdit
    Remarque : Avant la compilation vous deviez choisir l'option du Mode à exécuter : "Run in GUI Mode" pour la console ne s'affiche pas lors de l'exécution de l'exécutable.


    CheckMyProcessActif.vbs
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Option Explicit
    Dim ws,MyApplication,MyProcess
    Set ws = CreateObject("WScript.Shell")
    MyApplication = "%Programfiles%\WinRAR\WinRAR.exe"
    MyProcess = "WinRAR.exe"
    Do
    'vérifions si le processus ne fonctionne pas,alors on l'exécute
        If CheckProcess(MyProcess) = False then 
            Call Executer(DblQuote(MyApplication),0)'0 to Hide the console
    'On fait 10 minutes de pause et on continue dans notre boucle pour vérifier
    'si notre processus existe ou non (dans notre cas = WinRAR.exe)
            Pause(10) 'pause de 10 minutes
        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
            else
                CheckProcess = MyProcess & " is not running"
                CheckProcess = False
            End if
        Set objWMIService = Nothing
        Set colProcessList = Nothing
    End Function
    '***********************************************************************************************
        Sub Pause(NMins)
            Wscript.Sleep(NMins*1000*60)
        End Sub  
    '***********************************************************************************************
     Function Executer(StrCmd,Console)
        Dim ws,MyCmd,Resultat
        Set ws = CreateObject("wscript.Shell")
    'La valeur 0 pour cacher la console MS-DOS
        If Console = 0 Then
            MyCmd = "CMD /C " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,True)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
    'La valeur 1 pour montrer la console MS-DOS
        If Console = 1 Then
            MyCmd = "CMD /K " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,False)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
        Executer = Resultat
    End Function
    '**********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************

  8. #8
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Merci hackoofr, ça marche bien cette solution aussi.


    Citation Envoyé par hackoofr Voir le message

    J'ai testé aussi cette solution en vbscript qui marche 5/5 chez moi
    Donc, on peut facilement faire une conversion du fichier écrit en vbscript vers un exécutable.exe avec l'éditeur VbsEdit
    Remarque : Avant la compilation vous deviez choisir l'option du Mode à exécuter : "Run in GUI Mode" pour la console ne s'affiche pas lors de l'exécution de l'exécutable.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  9. #9
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut Mise à jour : Ajout d'un fichier journal pour lire les exécutions effectuées lors de la vérification

    Mise à jour : Ajout d'un fichier journal pour lire les exécutions effectuées lors de la vérification

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Option Explicit
    Dim ws,MyApplication,MyProcess,LOG_FILE_PATH,LogFile
    Set ws = CreateObject("WScript.Shell")
    LogFile = Left(Wscript.ScriptName,InstrRev(Wscript.ScriptName, ".")) & "log"
    LOG_FILE_PATH = ws.ExpandEnvironmentStrings("%AppData%") & "\" & LogFile
    MyApplication = "%Programfiles%\WinRAR\WinRAR.exe"
    MyProcess = "WinRAR.exe"
    Do
    'vérifions si le processus ne fonctionne pas,alors on l'exécute
        If Not CheckProcess(MyProcess) Then 
            Call Log(LOG_FILE_PATH,String(10,"*") & Now & String(10,"*") & vbCrLf & "Lancement du Processus : "& DblQuote(MyProcess) & vbCrLf & String(70,"*"))
            Call Executer(DblQuote(MyApplication),0)'0 to Hide the console
    'On fait 10 minutes de pause et on continue dans notre boucle pour vérifier
    'si notre processus existe ou non (dans notre cas = WinRAR.exe)
            Pause(10) 'pause de 10 minutes
        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
            else
                CheckProcess = MyProcess & " is not running"
                CheckProcess = False
            End if
        Set objWMIService = Nothing
        Set colProcessList = Nothing
    End Function
    '***********************************************************************************************
        Sub Pause(NMins)
            Wscript.Sleep(NMins*1000*60)
        End Sub  
    '***********************************************************************************************
     Function Executer(StrCmd,Console)
        Dim ws,MyCmd,Resultat
        Set ws = CreateObject("wscript.Shell")
    'La valeur 0 pour cacher la console MS-DOS
        If Console = 0 Then
            MyCmd = "CMD /C " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,False)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
    'La valeur 1 pour montrer la console MS-DOS
        If Console = 1 Then
            MyCmd = "CMD /K " & StrCmd & " "
            Resultat = ws.run(MyCmd,Console,False)
            If Resultat = 0 Then
            Else
                MsgBox "Une erreur inconnue est survenue !",16,"Une erreur inconnue est survenue !"
            End If
        End If
        Executer = Resultat
    End Function
    '**********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************
    Sub Log(strLogFilePath,strLogContent)
        Const APPEND = 8
        Dim objFso,objLogFile
        Set objFso = CreateObject("Scripting.FileSystemObject")
        If Not objFso.FileExists(strLogFilePath) Then objFso.CreateTextFile(strLogFilePath, True).Close
        Set objLogFile = objFso.OpenTextFile(strLogFilePath,APPEND)
        objLogFile.WriteLine strLogContent
        objLogFile.Close
    End Sub 
    '**********************************************************************************************

  10. #10
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai pris la solution en CheckMyProcessActif.vbs de hackoofr avec l'éditeur pour convertir en .exe

    J'ai indiqué "résolu" parce que cette solution me convient parfaitement.

    Je vois que cette solution ça permet de vérifier le processus fichier comme winrar.exe et si le fichier n'est plus dans le processus,
    je peux démarrer l'application avec le chemin et le fichier indépendamment.

    Je trouve ça super bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    processus: Winrar.exe
    fichier: c:\mes programmes\winrar.exe
    Le temp, dans le script c'est 10 minutes, j'ai mis 1 minute. Mais en regardant dans le code, je vois autre chose en rapport avec la
    pause, il sert à quoi ce bout de code?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Pause(NMins)         Wscript.Sleep(NMins*1000*60)     End Sub
    Tout le code sert juste à vérifier le processus, utiliser le chemin/programme et établir la pause?
    Est-ce que je pourrait avoir moins de ligne?

    C'est que je commence à m'intéresser à ce genre de language qui est le .vbs
    Bien merci Hackoofr pour ton aide et m'avoir fait découvrir ce truc.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  11. #11
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    A propos de Wscript.sleep(Time)
    syntaxe
    WScript.Sleep lngTime
    arguments:
    lngTime est le délai en millisecondes
    Donc 1000*60 = 1 minute puisque 1000 ms = 1 s

  12. #12
    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 billet "Vérifier si un processus devient inactif et avertir si c'est le cas"
    Débutant en VBScript, j'aurai souhaité avoir si possible du commentaire détaillé sur la partie Loop du script que je rappelle
    et qui correspond bien à mon besoin
    En ce qui concerne l'ajout complémentaire d'un fichier log supplémentaire dans quel répertoire doit on le trouver?

    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  
    '*********

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

Discussions similaires

  1. [Batch] Vérifier si un processus est lancé ou non ?
    Par hackoofr dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 25/04/2014, 21h13
  2. [Débutant] Vérifier si un processus tourne ou pas ?
    Par Gigli dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/05/2012, 10h17
  3. Vérifier si un processus est lancé ou non
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 03/12/2009, 18h55
  4. Réponses: 5
    Dernier message: 20/07/2009, 17h04
  5. Vérifier si un processus est actif
    Par Olivier Regnier dans le forum Langage
    Réponses: 29
    Dernier message: 11/03/2007, 20h53

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