lancement et arret d'un process: impossible d'arreter le process!
Un programme développé en VisualBasic 2008, utilisé depuis plus de 8 mois quotidiennement sans souci, disfonctionne depuis trois jours.
Ce code télécharge des fichiers, lance un process (MediaPortal) qui lui effectuera des mises à jours sur une base puis attend sagement les prochaines commandes de l'utilisateur à travers son interface graphique (il s'agit de MediaPortal).
pour le lancement
déclaration: Dim MPid As Process
lancement : MPid = Process.Start(MediaportalPath) ok bien lancé
pour l'arrêt
arret : ValRetStop = MPid.CloseMainWindow()
: MPid.Close()
Si le programme est lancé au boot de XP Pro (toutes derniéres mises à jour intégrées) le process n'est pas arrété, message d'erreur:
"Les informations demandées ne sont pas disponibles, car le processus n'est plus exécuté."
en réalité le process est bien là, vivant, fonctionnant correctement! Impossible de catcher cette erreur par Try Catch End Try etc...
Encore plus bizzare, si le process est lancé par un double clic sur le raccourci dans le dossier démarrage, il est lancé mais arrêté sans probléme, dans ce cas la valeur de retour ValRetStop est True!
Faq, articles, Google ont été mis à contribution, pas de mauvaise utilisation (sur?), pas trace d'anomalie sur ces deux instructions!
Probléme identique avec kill ou close et kill!!
Merci de votre aide
Code:
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
|
Private Sub Panneau(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' 1 récupérer le nom du dossier où se trouve les programmes
Try
TreeDossierProgrammes = Directory.GetCurrentDirectory
Catch ex As Exception
Me.Crashzone.Text = ex.Message
Exit Sub
End Try
' 2 lancer le programme MP de mise à jour
MediaportalPath = Replace(TreeDossierProgrammes, "\Guide\Programmes", "\MediaPortal\Mediaportal.exe")
Try
MPid = Process.Start(MediaportalPath)
System.Threading.Thread.Sleep(10 * 1000)
Catch ex As Exception
Me.Crashzone.Text = "incident, MP n'a pas été lancé " + MediaportalPath + " : " + MPid.ToString + " : " + ex.Message
End Try
' 3 arréter le programme MP
Try
ValRetStop = MPid.CloseMainWindow()
' MPid.Close()
MPid.Kill()
Catch ex As Exception
Me.Crashzone.Text = "incident, MP n'a pas été arrété " + MediaportalPath + " : " + MPid.ToString + " : " + ValRetStop.ToString + " : " + ex.Message
Exit Sub
End Try
' 4 arréter ce test
Me.Crashzone.Text = "MP arrété? " + ValRetStop.ToString
End Sub |