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
Partager