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