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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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...

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