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

MFC Discussion :

Résultat commande MS-Dos > fichier.txt par Shell


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut Résultat commande MS-Dos > fichier.txt par Shell
    Bonjour à tous,

    Je travaille sur un programme utilisant plusieurs application "extérieure" sous Dos.
    Pour l'une d'elle, je voudrais rediriger le résultat d'un shell Ms-Dos dans un fichier afin de le tester (pour savoir si l'application travaille ou pas, histoire de gagner du temps pour killer d'autre processus).

    Cela illustre bien ce que je veux faire. Le seul hic est que je lance cette application par une commande "Shellexecuteinfo"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SHELLEXECUTEINFO AppSudp;
    ZeroMemory(&AppSudp,sizeof(AppSudp));
    AppSudp.cbSize=sizeof(AppSudp);
    AppSudp.lpFile=CheminSUDP;
    AppSudp.fMask = SEE_MASK_NOCLOSEPROCESS;
    AppSudp.lpVerb="open";
    strcpy(ParamSUDP,"172.16.93.39 69 COM1 9600 8 aucune 1 516 VERBOSE > d:\\logsudp.txt");
    AppSudp.lpParameters = ParamSUDP;
    AppSudp.nShow = SW_SHOWMAXIMIZED;
    Appli_SUDP = AppSudp.hProcess;
     
    //Lancement SUDP
    ShellExecuteEx(&AppSudp);

    Ci-dessus les paramètres sont codés en dur pour plus "d'illustration". Cependant, cela ne marche pas dans mon prog.
    Alors qu'avec les memes parametres dans un shell Ms-Dos, cela fonctionne.

    Si quelqu'un a une idée, je suis preneur....
    Je reste à votre disposition, merci d'avance

    pense à mettre la balise de code, Merci Farscape

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut
    Niquel ca marche super bien, seulement now, j'ai un souci pour détruire le processus avec "TerminateProcess". J'ai pris la solution 1 de la faq en modifiant ma struct "SHELLEXECUTEINFO". Le fait de lancer "Cmd.Exe" (au lieu de mon appli) avec en paramètres le chemin de mon appli + autres m'engendre que je ne détruit plus le process.. Si vous avez des idées

    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
    //Struct de lancement de la commande ms-Dos + redirection fichier
    SHELLEXECUTEINFO AppSudp;
    ZeroMemory(&AppSudp,sizeof(AppSudp));
    AppSudp.cbSize=sizeof(AppSudp);
    AppSudp.lpFile= "cmd.exe";
    AppSudp.fMask = SEE_MASK_NOCLOSEPROCESS;
    AppSudp.lpVerb="open";
    //Concaténation chaine paramètres
    strcat(RedirectDos,"/c");
    strcat(RedirectDos," ");
    strcat(RedirectDos,CheminSUDP);
    strcat(RedirectDos," ");
    strcat(RedirectDos,"/");
    strcat(RedirectDos,ParamSUDP);
    //  D:\\Adu3200\\conv\\SUDP.exe/172.16.93.39 69 COM1 9600 8 aucune 1 516 VERBOSE > D:\\result.txt";
     
    AppSudp.lpParameters = RedirectDos;
     
    AppSudp.nShow = SW_SHOWMAXIMIZED;
    //Le processe change bien de valeur lors du lancement
    Appli_SUDP = AppSudp.hProcess;
     
     
    //Code utilisé pour la fermeture de mon programme :
    DWORD dwExitCode = 0;
    GetExitCodeProcess(AppSudp.hProcess, &dwExitCode);
    if(dwExitCode == STILL_ACTIVE) //process toujours présent ?
    {
    	// toujours la.
    	TerminateProcess(AppSudp.hProcess,0);
    	CloseHandle(AppSudp.hProcess);
    }

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    pourquoi ne pas avoir choisi la solution avec les pipes ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut
    Réexplication (ca sera peut être plus clair )

    Dans mon appli (qui est une vrai usine à gaz :s), je lance successivement 2 programmes dos. Le premier est le programme "SUDP"' qui écoute ce qui se passe en local sur le port 69 afin de rediriger les paquets envoyés par le 2nd programme qui est TFTP.

    Principe de fonctionnement :
    J'ouvre SUDP qui écoute et redirige le port 69 sur la RS232 avec encapsulation SLIP (Serial Line IP).
    Je lance une commande TFTP de type PUT qui envoie un fichier, sur le port 69 du pc. Ce dernier est donc redirigé par SUDP sur la laisons série. SUDP affiche les transfert entre mon microprocess et mon PC dans le shell DOS.
    Je voudrais sortir en temps réel ce qui se passe dans le shell Dos de l'application SUDP afin de vérifier que des données transfert sur la liaison série. Actuellement, la solution de rediriger la commande Dos => fichier uniquement accessible lorsque cette commande est (le fait que SUDP tourne, il prend la main sur la RS232, donc je vois pas ou ne connais pas le moyen de savoir si des données transite dans le buffer Rs, si la ressource est pris par un autre process)

    Peut être une autre solution vous viendra a l'esprit...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Par défaut
    Bonjour,

    si tu trouves une solution à ton problème, ça m'intéresse.
    J'ai un besoin similaire (j'ai d'ailleurs posté un message sur ce forum récemment: http://www.developpez.net/forums/sho...d.php?t=389248 mais sans doute un peu trop long pour avoir des réponses)

    J'étais parti de la deuxième méthode (redirection dans un fichier), sauf qu'au lieu de rediriger dans un fichier, j'utilise un pipe dont je copie le contenu dans une CString.
    Je bloque sur la lecture du pipe en temps réel, si tu as une idée ou si ça t'inspire...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut
    j'ai lu ton post et effectivement, nous sommes confrontés au même problèmes.. je cherche encore ....

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est quoi le probleme maintenant, tu n'arrives pas à tuer ton process ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut
    Le souci c'est que la solution décrite dans la faq permet certe de rediriger la sortie du programme Dos dans fichier, mais uniquement lorsque ce programme se termine.
    Hors moi, plutôt "nous" , souhaitons une actualisation et une écriture "constante" dans le fichier afin de vérifier que le programme "Dos" effectue les taches voulues.
    Il faut donc que l'écriture se fasse pendant que le programme est ouvert

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    je vois, mais malheureusement, je ne connais pas assez les flux dos pour te dire si c'est possible ou pas
    A premiere vue, j'aurai dit non, mais j'en sais rien ...

    Le programme, au lieu de rediriger la sortie vers le fichier, il peut pas écrire lui meme directement dans un fichier ou mieux communiquer par pipe avec l'autre programme ?

  11. #11
    Membre très actif
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 374
    Par défaut solution batarde
    j'ai eu le meme probleme pour gerer l'etat d'un tunnel ssh2 ouvert avec plink ou putty.
    il m'était impossible de connaitre l'etat du programme et donc de la connexion qu'il gérait.
    donc, j'ai lancé le programme avec un shellexecute, on garde bien le handle dans un coin pour pouvoir le tuer à la fin, surtout!
    maintenant, comment faire communiquer les deux programmes.??
    tout con, mais pas economique. j'ai choisi de passer par la base de registre.
    comme j'avais les sources de putty, j'ai rajouté une fonction d'ecriture dans une cle precise de la base de registre, qui me sert de drapeau de communication et d'etat entre mon appli de lancement et putty.
    c'est lourd, bete et mechant, mais ca marche trés trés bien.
    ca me permet surtout de tuer mon putty si la connexion tombe pour en relancer un autre.
    petit appel du pied. si quelqu'un a l'equivalent de putty en lib, juste pour le tunnelling ssh2, je prends..

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Par défaut
    Solution bien trouvée et pensée, cependant, je n'ai pas les sources des appli lancées par Shell (vive les grosses boîtes et la sous-traitance)

    Merci quand même de la proposition

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/12/2011, 21h47
  2. Envoi de fichier txt par ligne téléphonique à un PC
    Par rodamz49 dans le forum Général Java
    Réponses: 12
    Dernier message: 28/10/2008, 12h17
  3. Exportation d'1 fichier txt par une procédure stockée
    Par loutsky dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/06/2006, 18h25
  4. Commande de recup donnees fichier txt
    Par fara morgana dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 14/06/2006, 08h04
  5. Lire un fichier txt par http (C sous Linux)
    Par sleg dans le forum Réseau
    Réponses: 4
    Dernier message: 18/10/2005, 11h07

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