none
[Résolu] Lancement et activité d'une application

    Question

  • Bonjour à tous

    J'ai codé deux textbox pour afficher les chemin de fichiers sélectionnés grâce à 2 openfiledialog, plus précisément des fichiers .exe.
    Un timer est chargé de lancer les fichiers de la textbox grâce à ce code :

      Process.Start(TextBox1.Text)<br/>
    <br/>
      Process.Start(TextBox2.Text)
    

    Le problème de ce code est qu'il lance mes applications, mais les coupent aussitôt et les rallument 3 secondes après, ce qui est le temps de l'intervalle de mon timer.

    J'ai par conséquent créer un bouton capable d'arrêter le timer si besoin. Mais je ne sais pas comment faire pour charger entièrement les applications de mes textbox.

    Les applications à lancer ont été compilé avec C++ et sont de types consoles.

    Donc ma question est :

    Comment faire pour que les applications se lancent et finissent de charger, et comment faire pour les redémarrer si elle se ferment ?

    Je pense qu'il existe un contrôle permettant de vérifier si une application est active, mais je ne l'ai pas trouvé.

    Merci d'avance.

    mardi 29 juin 2010 15:19

Réponses

  • Bonjour,

    Le problème de ce code est qu'il lance mes applications, mais les coupent aussitôt et les rallument 3 secondes après, ce qui est le temps de l'intervalle de mon timer.
    Lorsque vous faites Process.Start(), vous lancez une application, mais votre code continue à s'executer. Si l'application lancée se ferme aussi tôt, c'est qu'il y a un bogue dans cette dernière... (un paramètre manquant ?).

    Comment faire pour que les applications se lancent et finissent de charger, et comment faire pour les redémarrer si elle se ferment ?
    Le plus simple est que votre Timer déclenche un BackgroundWorker. Ce backgroundworker se charger d'executer votre application et de le lancer si celui-ci se termine. Voilà le code à utiliser :

    Dim p As Process
    
    Do
      p = Process.Start(...)
      p.WaitForExit()
    Loop

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Crevette13 mercredi 30 juin 2010 20:36
    mardi 29 juin 2010 19:28
    Modérateur

Toutes les réponses

  • Bonjour,

    Le problème de ce code est qu'il lance mes applications, mais les coupent aussitôt et les rallument 3 secondes après, ce qui est le temps de l'intervalle de mon timer.
    Lorsque vous faites Process.Start(), vous lancez une application, mais votre code continue à s'executer. Si l'application lancée se ferme aussi tôt, c'est qu'il y a un bogue dans cette dernière... (un paramètre manquant ?).

    Comment faire pour que les applications se lancent et finissent de charger, et comment faire pour les redémarrer si elle se ferment ?
    Le plus simple est que votre Timer déclenche un BackgroundWorker. Ce backgroundworker se charger d'executer votre application et de le lancer si celui-ci se termine. Voilà le code à utiliser :

    Dim p As Process
    
    Do
      p = Process.Start(...)
      p.WaitForExit()
    Loop

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Crevette13 mercredi 30 juin 2010 20:36
    mardi 29 juin 2010 19:28
    Modérateur
  • Bonjour

    Merci de votre réponse

    J'ai testé votre code, les applications se lancent mais se ferment aussitôt et ce encore plus vite.

    J'aurais aimé savoir si il existe un moyen de vérifier si l'application qu'on vient de lancer est toujours en cours d'utilisation.
    Je pense qu'une solution serait de vérifier toutes les 5 secondes si l'application est lancé, et dans le cas ou elle ne le serait pas,
    faire relancer l'application avec une condition 'IF'

    Exemple

    If application non lancé = oui   THEN

    Démarrer application   ELSE

    Ne rien faire

    END IF

    Je tiens a m'excuser pour le mélange de français et d'anglais dans le code, mais c'est le seul moyen que j'ai trouvé pour vous faire comprendre

    Merci d'avance. Cordialement.

    mercredi 30 juin 2010 13:13
  • Bonjour,

    J'ai fait le test chez moi avec une invite de commande et cela fonctionne sans problème. C'est au niveau de l'application lancée que cela pose problème... Il faut chercher de ce côté.

    Vous pouvez vérifier qu'un processus est terminée, grâce à la propriété HasExited du processus lancé.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 30 juin 2010 14:47
    Modérateur
  • Bonjour

    Je viens de tester avec l'invite de commande, et en effet ca marche, mais toujours pas avec mon application

    J'ai essayé de lancer le .bat de l'application mais cela fais la même chose.

    Voila l'erreur qui apparait sur mon application

    'application.exe' n'est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

    J'ai pris l'initiative d'aller chercher sur internet avant de venir poster ici.

    La plupart des erreurs se référencent au path situé dans le registre.

    Dois-je en conclure que l'erreur vient de mon ordinateur ou du manque d'un code dans mon programme VB ?

    Encore merci pour votre aide. Cordialement.

     

    mercredi 30 juin 2010 15:38
  • Bonjour,

    Se pourrait-il que l'on essaie de lancer l'application sans préciser son chemin exact ? Dans ce cas, si l'EXE n'est pas qq part sur le chemin de recherche (ce qui est le cas par exemple pour cmd.exe ou calc.exe qui devrait donc marcher), l'application ne pourra pas se lancer. Dans ce cas, indiquer aussi son emplacement exact...

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 30 juin 2010 17:49
    Modérateur
  • Patrice, bonjour.

     

    Comme je l'ai écris au début du sujet, le code lance le texte de la textbox, et ce dernier est trouvé grâce à une open file dialog.

    Je pense que le chemin du fichier ne peut être que correcte.

    Merci quand même de votre aide, je vais essayer de me débrouiller, mais je pense que je ne vais pas trouvé grand chose.

     

    Cordialement.

    mercredi 30 juin 2010 19:53
  • Patrice, bonjour.

     

    Comme je l'ai écris au début du sujet, le code lance le texte de la textbox, et ce dernier est trouvé grâce à une open file dialog.

    Je pense que le chemin du fichier ne peut être que correcte.

    Merci quand même de votre aide, je vais essayer de me débrouiller, mais je pense que je ne vais pas trouvé grand chose.

     

    Cordialement.

    J'ai compris mon erreur, il fallait copier les fichiers de l'application dans le répertoire du programme a lancer, il ne me reste plus qu'a trouver le moyen d'arrêter les applications, merci encore pour votre aide.
    mercredi 30 juin 2010 20:35
  • Bonjour,

    Pour arrêter l'application, utilisez la méthode Kill() associé à votre processus.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 30 juin 2010 20:52
    Modérateur