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

C++ Discussion :

Retour d'exécution en mode Silent


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut Retour d'exécution en mode Silent
    Hello à tous!
    J'ai un programme (IHM) qui en lance un autre en mode silencieux, c'est-à-dire qu'il en appelle explicitement l'exécutable via une fonction du type ShellExecute(). Cet autre programme n'a pas d'IHM et se ferme tout seul quand il a fini son traitement.
    Ce que je voudrais, c'est que si jamais ce deuxième programme rencontre des erreurs au cours de son exécution, il en informe le premier.
    Pour l'instant, j'ai envisagé d'écrire un fichier (type INI) qui sera lu par le premier programme au moment ou le deuxième s'arrêtera, mais je n'aime pas trop cette solution.
    Ma question est donc simple: connaissez-vous d'autres moyens de signifier un tel retour d'exécution? Je voudrais pouvoir y mettre un ou plusieurs codes d'erreur avec du texte associé.
    Merci d'avance.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Pour une gestion simple/minimale, tu peux récupérer le code de retour du programme appelé
    code ret = 0 ==> OK
    code ret = 1 ==> fichier non trouvé
    ...

    Après, c'est à toi de définir tes conventions de code de retour
    le programme appelé doit respecter cette convention
    le programme appelant doit connaitre cette convention.

    Par contre, tu ne pourras jamais retourner que des nombres. Si tu veux plus d'informations (des chaines de caractères par exemple), il va falloir passer par une autre technique (fichier de résultat intermédiaire, ...)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    La solution passe, tout simplement, par l'utilisation correcte du prototype de la fonction principale: int main() (ou int main(int argc, char* argv[])

    En effet, main peut renvoyer deux (ou trois) valeurs différentes (en fonction du système d'exploitation):
    • 0 si l'exécution s'est terminée correctement
    • 1 si l'exécution s'est terminée sur une erreur
    • 2 si l'exécution s'est terminée sur un avertissement (uniquement sous unixoïdes, et non disponible sous windows)

    Grâce à cela, tu pourra utiliser le retour de la commande ShellExecute pour vérifier si elle s'est terminée correctement:
    • Si la valeur est supérieure 32: la commande s'est bien déroulée
    • Si la valeur est inférieure à 32, la commande a eu un problème

    Tu peux même te baser sur les valeur prédéfinies pour déterminer ce qui ne s'est pas passé correctement (cf la doc de shellExecute) pour le cas où l'application appelée n'a pas respecté les restrictions du système d'exploitation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Merci pour vos réponses .

    Sauf que j'avais oublié de vous préciser une chose très importante : je ne maîtrise pas la manière dont le deuxième programme est appelé .
    Celui-ci est un outil que je développe et qui sera appelé par un séquenceur (premier programme) qui peut lancer d'autres exécutables. D'où ma déduction qu'il utilise une fonction du type ShellExecute(). Je suis en train de me renseigner pour vérifier quelle fonction est utilisée et si une analyse du code de retour est faite.

    Mais La fonction ShellExecute(), si je ne me trompe pas, lance le fichier passé en paramètre et ressort aussitôt, non? Elle n'attend pas que le processus lancé se termine, si? Auquel cas cette solution ne m'irait pas du tout car je peux avoir des erreurs au cours de l'exécution de l'outil, même si celui-ci a bien été lancé.
    Tout ce qui m'intéresse, c'est les différents codes et textes de retour liés à mon exécution et non ceux liés au lancement du processus. Ceux-là doivent être gérés par le séquenceur.

    Je reviens alors à ma première question. Si l'on considère que je n'ai pas accès au code de retour de la fonction qui appelle l'exécutable de mon outil, comment faire savoir au séquenceur le(s) erreur(s) que l'outil a pu rencontrer?

    Dites-moi si je suis pas assez clair
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Si tu ne peux pas forcément avoir accès au retour de l'appel, et que tu as des informations potentiellement multiples à faire connaitre, le mieux est effectivement de passer par un système de "logging"...

    N'oublie alors pas de "structurer" correctement les informations que tu met dans le fichier log, sous une forme proche - par exemple - de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [AA/MM/DD hh:mm:ss] niveau, contexte, problème
    ou
    • AA représente les deux chiffres de l'année
    • MM représente les deux chiffres du mois
    • DD représente les deux chiffre du jour
    • hh représente l'heure
    • mm représente les minutes
    • ss représente les secondes
    • niveau représente le "niveau de récupérabilité" de l'erreur (0 = warning, 1 = erreur simple, 2 = erreur récupérable, 3 = erreur fatale...)
    • contexte représente le contexte dans lequel l'erreur est apparue
    • problème représente le problème tel qu'il s'est présenté
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ouais. Je crois que je vais pas trop avoir le choix...

    Le retour d'erreur est destiné au séquenceur pour qu'il sache, après avoir lancé l'outil, si celui-ci a accompli correctement sa tâche ou pas. Disons que pour les utilisateurs du séquenceur, c'est plus facile de lire les erreurs dans un fichier que d'implémenter la gestion de retour d'erreurs spécifiques à mon outil alors que celui-ci est lancé par une commande qui est à la base générique à tout fichier exécutable.

    Je me dis alors que le formatage tel que tu me proposes n'est pas forcément utile s'il n'est qu'à destination du séquenceur. Par exemple je ne pense pas que les dates soient nécessaires car ce fichier ne serait créé qu'à la demande explicite du séquenceur (lancement de l'outil) + éventuelles erreurs dans son exécution. Autant simplifier alors la lecture logicielle du fichier et éviter le superflu dans le déformatage de la ligne, non?
    Mais j'ai bien noté que ce n'était qu'un exemple .

    Autre question: qu'est-ce que tu entends par "contexte dans lequel l'erreur est apparue"?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Ouais. Je crois que je vais pas trop avoir le choix...

    Le retour d'erreur est destiné au séquenceur pour qu'il sache, après avoir lancé l'outil, si celui-ci a accompli correctement sa tâche ou pas. Disons que pour les utilisateurs du séquenceur, c'est plus facile de lire les erreurs dans un fichier que d'implémenter la gestion de retour d'erreurs spécifiques à mon outil alors que celui-ci est lancé par une commande qui est à la base générique à tout fichier exécutable.

    Je me dis alors que le formatage tel que tu me proposes n'est pas forcément utile s'il n'est qu'à destination du séquenceur. Par exemple je ne pense pas que les dates soient nécessaires car ce fichier ne serait créé qu'à la demande explicite du séquenceur (lancement de l'outil) + éventuelles erreurs dans son exécution. Autant simplifier alors la lecture logicielle du fichier et éviter le superflu dans le déformatage de la ligne, non?
    Mais j'ai bien noté que ce n'était qu'un exemple .
    A vrai dire, il faut surtout voir si le fichier log est recréé à chaque fois ou si tu estimes utile / intéressant de garder une trace des erreurs dans le temps.

    En effet, bien que destiné "prioritairement" au séquenceur, ce fichier log pourrait te permettre de créer une historique des problèmes rencontrés, et, pourquoi pas, t'aider dans la résolution de ceux-ci...

    Dés lors, après ouverture du fichier, il te "suffirait" de chercher le dernier "[" et d'en tester le contenu pour savoir si c'est d'une manière générale "cohérent" avec le moment où le séquenceur aura appelé la commande

    Mais effectivement, ce n'est qu'un exemple, et je pars sans doute beaucoup trop loin
    Autre question: qu'est-ce que tu entends par "contexte dans lequel l'erreur est apparue"?
    Ce peut être à peu près tout et n'importe quoi... j'aurais tendance à fournir le chemin d'appel des fonctions qui ont mené à l'erreur.

    Cela te permettra, justement, de savoir en quoi l'appel de l'application avec les paramètres que tu as fournis a mené à produire cette erreur, et, encore une fois, c'est susceptible de t'apporter des précisions intéressantes voire importantes pour la résolution de l'erreur
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ok, je vais prendre en compte ces remarques pour définir mon fichier de trace, vu qu'apparemment il n'y a que comme ça que je pourrais mon sortir.
    Merci pour ces avis!
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

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

Discussions similaires

  1. Exécuter en mode batch sous sas, sous windows
    Par nostress dans le forum Administration et Installation
    Réponses: 3
    Dernier message: 25/06/2008, 15h25
  2. [Conception] exécution en mode exclusif. Accès bdd bloqué
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/04/2007, 20h45
  3. warnings à l'exécution en mode debug
    Par garestou dans le forum MFC
    Réponses: 2
    Dernier message: 23/06/2005, 16h17
  4. [Conception] Taille des formes fixes au retour d'exécution
    Par jmdeffet dans le forum Composants VCL
    Réponses: 1
    Dernier message: 16/06/2005, 09h07
  5. [VB.NET] Problème exécution en mode release.
    Par leSeb dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/01/2005, 17h39

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