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 :

CreateProcess() > Comment définir un fichier de log en buffer de sortie ?


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Par défaut CreateProcess() > Comment définir un fichier de log en buffer de sortie ?
    Bonjour à tous,



    j'ai une petite question. J'utilise CreateProcess() pour créer et lancer un processus à partir d'une application MFC. Le processus que je lance est un fichier qui contient des instruction printf()
    Je me demande comment faire pour définir le buffer de sortie du processus lancée comme étant un fichier de log ?

    Le traditionnel :
    Ne fonctionne pas avec CreateProcess().
    J'ai testé en passant : CreateProcess(NULL, "blabla.exe > log.txt"); et pour autant cela inscrit toutes les sorties dans la console, et non dans le fichier de log.
    (si je tape la même commande dans l'interpréteur - donc hors de mon application - cela marche correctement et me créé bien le fichier de log)


    Quelqu'un a t-il une idée ?
    (Désolé si je suis pas très clair).
    Bonne soirée à tous.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    La redirection, c'est cmd.exe qui s'en charge, voilà pourquoi ça ne marche qu'avec system().

    Si tu veux la faire toi-même, c'est un peu plus compliqué:
    Creating a Child Process with Redirected Input and Output
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Par défaut
    Merci pour cette info.
    C'est dingue, dès qu'on connait le nom des techniques on arrive beaucoup mieux à trouver des infos dessus.

    Je vais regarder la doc msdn que tu m'a mit, et je verrais si je choisi de faire le redirect output.


    Bonne journée.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Par défaut
    Re.



    Après avoir lu la doc, en fait j'ai quand même un problème. Le problème est que je ne veut pas intégrer de code dans le processus créé (c'est un exe dont je n'ai pas la source).

    Et je ne peux pas appeler par system() puisque je dois pouvoir suivre l'évolution du handle du processus afin de savoir lorsqu'il se termine, et aussi pour vérifier son état.


    Pour être plus clair (je l'étais pas forcément), je voudrais appeller un exe dans mon appli c++ MFC, par le biais d'une commande de type :
    monprogr.exe -arg value > fichierLog.txt


    Le but étant de rediriger le flux de sortie vers le fichier de log.
    Merci d'avance pour vos conseils, je suis vraiment bloqué, et un peu perdu.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Normalement, tu n'as pas besoin de modifier le code du processus créé, sauf peut-être si celui-ci utilise des fonctions liées spécifiquement à la console.

    Sinon, le simple fait de remplacer ses handles standard doit suffire à rediriger ses entrées/sorties, y compris celles de stdio.h...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Par défaut
    Encore une fois, merci Médinoc pour tes conseils.


    Alors j'ai appronfondi un peu la chose, et j'ai trouvé une manière d'obtenir exactement ce dont j'ai besoin.
    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
    STARTUPINFO         processStartupInfo;
    PROCESS_INFORMATION processProcessInfo;
     
     
    ::ZeroMemory(&processStartupInfo, sizeof(STARTUPINFO));
    processStartupInfo.cb = sizeof(STARTUPINFO);
    processStartupInfo.wShowWindow = SW_SHOW;
    processStartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
     
    if(!::CreateProcess(NULL, "programme.bat > log.txt", 
                              NULL, NULL, TRUE, 
                              CREATE_NEW_CONSOLE, NULL, NULL, 
                              &processStartupInfo, &processProcessInfo))
    	//erreur lors de la création du process
     
    //Ici, je peux utiliser hProcess pour faire des actions sur le processus, 
    //connaître son état, etc.
     
     
     
    ::CloseHandle(processProcessInfo.hThread);
    ::CloseHandle(processProcessInfo.hProcess);

    Voilà. Si d'autres personne ont le même problème on ne sait jamais.

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

Discussions similaires

  1. Comment gérer un fichier de logs ?
    Par jeyce dans le forum Logging
    Réponses: 2
    Dernier message: 27/10/2006, 04h35
  2. Réponses: 6
    Dernier message: 12/09/2006, 18h49
  3. Réponses: 2
    Dernier message: 07/08/2006, 11h55
  4. Comment créer un fichier log ?
    Par raoulmania dans le forum Langage
    Réponses: 15
    Dernier message: 22/07/2005, 11h31
  5. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30

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