Surveiller un processus et le relancer

LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 17 sept. 2007 à 13:42
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 19 sept. 2007 à 09:53
Bonjour,

Voila j'ai un programme  qui est censé tourner constamment
mais bon comme rien n'est fiable je cherche un moyen de surveiller cet exe et de le relancer dans le cas ou il planterai(ne reponds aps etc...)
par contre je ne sais pas du tout par ou commencer alors si quelqu'un peut me guider un peu ca serait génial!
Merci!

 

11 réponses

cs_Gammacronosios Messages postés 49 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 23 février 2010
17 sept. 2007 à 14:25
Je peux commencer par t'aider (je pense) en te disant qu'il existe une classe "Process" qui contient les proriétés et les fonctions dont tu as besoins.

Dim _process as System.Diagnostic.Process
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
17 sept. 2007 à 14:36
j'ai trouver ceci:

Sub VerifRtopProcess()
      'Vérifie la présence d'outloo, si le process n'est pas présent on lance Outlook.
      Dim proc As New Process

      Try
         'Vérification de l'existence du process (on le trouve dans le gestionnaire des taches ^^)
         If UBound(Diagnostics.Process.GetProcessesByName("RtopServerCORUS_RAIL")) < 0 Then
            'Si il n'est pas déjà lancé on le lance donc manuellement
            proc.StartInfo.FileName = "C:\C07-03-04 DEV I4\RtopServerCORUS_RAIL\Release\RtopServerCORUS_RAIL.exe"
            'Définition du style de la fenêtre (maximisé, minimisé, normal, caché)
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
            'Démarrage du process
            proc.Start()
         End If
      Catch err As Exception
         MsgBox(err.ToString(), MsgBoxStyle.Critical, "Erreur !")
      End Try
   End Sub

ca te semble bien?
faut juste que je fasse un appel a cette fonction sur un timer avec sleep etc... non?

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
17 sept. 2007 à 14:43
ca marche si le processus n'est pas lancé mais je ne sais pas si ca marchera si le processus plante...

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
17 sept. 2007 à 16:17
bon comme prévu ca ne marche aps qd le processus est planté
je pense que je me rapproche de la vérité :-)
mais bon c'est pas exactement ce que je veux
si mon processus dans le gestionnaire des taches marque " ne repond pas"
ben j'aimerais le kill et relancer ....

je sais pas comment détecter le " reponds pas"

 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
17 sept. 2007 à 17:25
Pour continuer dans la lancée de notre ami grammacronosios, je peux te dire que cette même classe System.diagnostic.Process possède une propriété Responding, valant False si l'interface utilisateur d'un process ne répond pas !
Pas testé, mais rien qu'à lire l'aide en ligne, ca sent bon pour toi ça, non ?
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
18 sept. 2007 à 10:25
salut
merci pr l'info

j'ai test ceci mais il tombe en exception ...
Dim proc As New Process
      Try
 If proc.Responding Then
            Console.WriteLine("Status:  Responding to user interface")
         Else
            Console.WriteLine("Status:  Not Responding")
            proc.Kill()
            'Si il n'est pas déjà lancé on le lance donc manuellement
            proc.StartInfo.FileName = "C:\C07-03-04 DEV I4\RtopServerCORUS_RAIL\Release\RtopServerCORUS_RAIL.exe"
            'Définition du style de la fenêtre (maximisé, minimisé, normal, caché)
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
            'Démarrage du process
            proc.Start()
         End If
      Catch err As Exception
         MsgBox(err.ToString(), MsgBoxStyle.Critical, "Erreur !")
      End Try
franchement je ne vois pas trop!
erreur : aucun processus n'est associé a cet objet!
 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
18 sept. 2007 à 10:33
ouais normal en fait a aucun moment je lui dis quel est le process a surveiller
mais comment faire pour que proc = mon application?

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
18 sept. 2007 à 10:40
re,

j'ai testé ceci :

 Dim proc As New Process
      Dim myProcesses() As Process
      myProcesses = Process.GetProcessesByName("RtopServerCORUS_RAIL.exe")
      Try
         'Vérification de l'existence du process
         If UBound(Diagnostics.Process.GetProcessesByName("RtopServerCORUS_RAIL")) < 0 Then
            'Si il n'est pas déjà lancé on le lance donc manuellement
            proc.StartInfo.FileName = "C:\C07-03-04 DEV I4\RtopServerCORUS_RAIL\Release\RtopServerCORUS_RAIL.exe"
            'Définition du style de la fenêtre (maximisé, minimisé, normal, caché)
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
            'Démarrage du process
            proc.Start()
         End If
         If myProcesses(0).Responding Then
            Console.WriteLine("Status:  Responding to user interface")
         Else
            Console.WriteLine("Status:  Not Responding")
            myProcesses(0).Kill()
            'Si il n'est pas déjà lancé on le lance donc manuellement
            proc.StartInfo.FileName = "C:\C07-03-04 DEV I4\RtopServerCORUS_RAIL\Release\RtopServerCORUS_RAIL.exe"
            'Définition du style de la fenêtre (maximisé, minimisé, normal, caché)
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Normal
            'Démarrage du process
            proc.Start()
         End If
      Catch err As Exception
         MsgBox(err.ToString(), MsgBoxStyle.Critical, "Erreur !")
      End Try

mais il me dit que l'indice est en dehors des limites du tableau!

 
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
18 sept. 2007 à 10:48
je crois que c'est bon : deux erreurs:
1/ pas mettre .exe dans le nom du process
2/apriori vaut mieux mettre CloseMainWindow que kill ...

 
0
cs_Gammacronosios Messages postés 49 Date d'inscription lundi 25 octobre 2004 Statut Membre Dernière intervention 23 février 2010
19 sept. 2007 à 08:25
Effectivement, il ne faut pas mettre de ".exe".
La methode "Kill" est mieux approprié pour arrété un processus car il arrête instantanément le processus alors que "CloseMainWindow" utilise la methode "Close" de la fenêtre principale du  processus (Dans ce cas imaginons que dans le programme on empêche la fermeture de la fanêtre si elle est fermé par le gestionnaire des taches : sa ne marche pas)

Ton problème d'index hors tableau est peut-être du au fait que le processus "RtopServerCORUS_RAIL" n'existe pas ou plus (donc vb retourne un tableau de process null). Essaye comme ça :

      Dim myProcesses() As Process
      myProcesses = Process.GetProcessesByName("RtopServerCORUS_RAIL.exe")
      If myprocesses is nothing then
         exit sub
      Else
         'continue avec ton code
      End if
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
19 sept. 2007 à 09:53
ouais c'est vrai que mieux vaut mettre une sécurité Merci!

 
0
Rejoignez-nous