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