LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
17 sept. 2007 à 13:42
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 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!
cs_Gammacronosios
Messages postés49Date d'inscriptionlundi 25 octobre 2004StatutMembreDernière intervention23 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.
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 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?
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 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"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 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 ?
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 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!
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 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!
cs_Gammacronosios
Messages postés49Date d'inscriptionlundi 25 octobre 2004StatutMembreDernière intervention23 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