IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

TProcess : application maître informée en cas d'erreur d’exécution de l'esclave [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut TProcess : application maître informée en cas d'erreur d’exécution de l'esclave
    Bonsoir, j'ouvre une application à partir d'une autre.

    J'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.LaunchConverter(Path: string);
    var
      AProcess: TProcess;
    begin
      AProcess := TProcess.Create(nil);
      AProcess.CommandLine := ExtractFilePath(Application.Exename)+'Test_Params.exe ' + Path;
      AProcess.Options := AProcess.Options + [poWaitOnExit];
      AProcess.Execute;
      AProcess.Free;
    end;
    Je voudrais, que mon application maître (celle qui ouvre l'autre) puisse être informée en cas d'erreur d’exécution de l'esclave...

    Pour resumer :
    Le programme ouvre l'application, et attend la fin du processus. En cas de bug du programme lancé, celui-ci se terminera automatiquement, mais le programme maitre ne sera pas informé de l'erreur.

    J'avais pensé noter dans un fichier txt la présence d'une erreur. Comme ça après exécution du programme extérieur, je viens lire dans le fichier txt la présence ou non de l'erreur d’exécution...
    Qu'en pensez vous?

    Merci !

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Si votre programme renvoie un code d'erreur, vous pouvez utiliser la propriété ExitStatus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      if AProcess.ExitStatus <> 0 then
      begin
        // Erreur d'exécution
        // ...
      end;
    Sinon, il y a dans le wiki de Lazarus un exemple détaillé d'appels de programme externe (en français) : Executing_External_Programs
    --
    Philippe.
    Philippe.

  3. #3
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Merci, mais je ne pige pas trop comment utiliser ton code. Car mon programme maitre attend que l'esclave ai terminé sa tache, or si l'esclave bug, le maitre reste bloqué et attend indefiniement...

    Quand au lien wiki, je le connaissais deja! C'est grâce a lui que j'ai apris a utiliser tprocess.

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Merci, mais je ne pige pas trop comment utiliser ton code. Car mon programme maitre attend que l'esclave ai terminé sa tache, or si l'esclave bug, le maitre reste bloqué et attend indefiniement...
    Eh bien, ExitStatus renvoie la valeur de sortie du programme :
    • 0 => sortie sans erreur
    • 1 => arrêt du processus par le système (sous Windows)
    • n => code de sortie renvoyé par le programme appelé ou "esclave"

    Maintenant, c'est au programme appelé d'être bien conçu et de gérer les bugs, même ceux non prévus, par exemple en traitant l'évènement TApplication.OnException et en renvoyant une valeur de sortie via l'instruction Halt(n).
    Cela dit, vous ne pourrez rien contre un programme appelé qui rentre dans une boucle infinie...
    --
    Philippe.
    Philippe.

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Salut, je traite les erreurs avec
    Sur les points "sensibles", je gère les possibles erreurs et je renvois donc un code avec Halt();. Le code renvoyé par Halt me permet d'afficher un message d'erreur lié au code.

    Merci beaucoup de votre participation !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher bulle d'information en cas d'erreur
    Par IMPRO dans le forum Général Java
    Réponses: 2
    Dernier message: 19/06/2012, 11h21
  2. afficher la pile en cas d'erreur
    Par fabrice1596 dans le forum Langage
    Réponses: 6
    Dernier message: 01/06/2005, 15h01
  3. Réponses: 7
    Dernier message: 15/03/2005, 14h44
  4. Redirection en cas d'erreur sur una page
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 03/09/2004, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo