Partage
  • Partager sur Facebook
  • Partager sur Twitter

Executer un programme

a partir de mon programme

    26 février 2008 à 11:44:18

    bonjour, tout est dans le titre.
    j'aimerai pouvoir lancer un programme fait moi même a partir d'un autre de mes programme.
    Quelle commande utiliser?

    Merci

    PS : la fonction de recherche ne marchait pas désolé si le topic existe déjà.
    J'ai déja créer un topic pour la même question mais en C. La je vous demande le code en C++
    • Partager sur Facebook
    • Partager sur Twitter
      26 février 2008 à 13:39:14

      Bonjour,

      J'ai lus quelques part qu'on pouvait utiliser system().
      Et bien étonnant d'ailleur, que cette fonction pouvait fonctionner sous Windows et Linux.

      donc sous windows tu peux faire :
      1. system("C:/dossiers/executable.exe");


      Et sous Linux
      1. system("./dossier/executable");


      Bon, je t'avouerai que quand je suis tombé dessu je cherchais totalement autre chose, donc j'suis surement passé un peu vite sur les explications, et sur de possibles avertissements. J'pense que ca risque d'en faire hurler plus d'un sur le SdZ :D .
      Mais bon, je te conseille quand meme de vérifier son fonctionnement.

      Bon evidement là c'est pour exectuer une programme déjà compiler, mais il y a aussi les threads qui te servent à exectuer des parties de tes codes en meme temps.

      Bonne chance !

      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2008 à 15:02:46

        Il n'y a vraiment pas d'autre solution que cette fonction "system()"?
        Parce-que si c'est ça, autant programmer en batch...
        • Partager sur Facebook
        • Partager sur Twitter
          26 février 2008 à 15:09:16

          comme c'est l'OS qui lance les programmes il n'y a pas vraiment d'autre possibilité.
          • Partager sur Facebook
          • Partager sur Twitter
            26 février 2008 à 16:23:48

            Bah y'a peut etre des fonctions systeme en C ou C++ en passant pas l'API Win32 (sous Windows !)..

            A part ça, les threads... Mais ca ne permet pas de lancer un programme extérieur... Du moins pas que je sache, et ca m'étonnerait grandement.
            • Partager sur Facebook
            • Partager sur Twitter
              26 février 2008 à 16:55:09

              CreateProcess!

              1. #include <windows.h>
              2. //...
              3. void demarrer( std::string chemin )
              4. {
              5.     STARTUPINFO si;
              6.     PROCESS_INFORMATION pi;
              7.     ZeroMemory( &si, sizeof(si) );
              8.     si.cb = sizeof(si);
              9.     ZeroMemory( &pi, sizeof(pi) );
              10.     // Je le sais que c'est mauvais mais il faut faire avec l'API Win32
              11.     char * buffChemin = new char[ chemin.length() + 1 ];
              12.     strcpy( buffChemin, chemin.c_str() );
              13.     if( !CreateProcessA( 0, buffChemin, 0, 0, FALSE, 0, 0, 0, &si, &pi )
              14.     {
              15.         delete buffChemin;
              16.         // peut être remplacé par un "return false;" ;-)
              17.         throw std::exception( "Impossible de démarrer le programme" );
              18.     }
              19.     // attend la fin du programme  
              20.     WaitForSingleObject( pi.hProcess, INFINITE );
              21.     CloseHandle( pi.hProcess );
              22.     CloseHandle( pi.hThread );
              23.     delete buffChemin;
              24. }
              • Partager sur Facebook
              • Partager sur Twitter
                26 février 2008 à 20:32:29

                Merci beaucoup MatteX mais le compilateur affiche une erreur et un avertissement:

                code:
                1. #include <windows.h>
                2. #include <iostream>
                3. void demarrer( std::string chemin )
                4. {
                5.     STARTUPINFO si;
                6.     PROCESS_INFORMATION pi;
                7.     ZeroMemory( &si, sizeof(si) );
                8.     si.cb = sizeof(si);
                9.     ZeroMemory( &pi, sizeof(pi) );
                10.     // Je le sais que c'est mauvais mais il faut faire avec l'API Win32
                11.     char * buffChemin = new char[ chemin.length() + 1 ];
                12.     strcpy( buffChemin, chemin.c_str() );
                13.     if( !CreateProcessA( 0, buffChemin, 0, 0, FALSE, 0, 0, 0, &si, &pi ))
                14.     {
                15.         delete buffChemin;
                16.         // peut être remplacé par un "return false;" ;-)
                17.         throw std::exception( "Impossible de démarrer le programme" );
                18.     }
                19.     // attend la fin du programme  
                20.     WaitForSingleObject( pi.hProcess, INFINITE );
                21.     CloseHandle( pi.hProcess );
                22.     CloseHandle( pi.hThread );
                23.     delete buffChemin;
                24. }


                Citation : Compilateur Visual C++ 2008

                ------ Début de la génération : Projet : CMDOS, Configuration : Debug Win32 ------
                Compilation en cours...
                executer_programme.cpp
                c:\programmation\cmdos\c++\cmdos\cmdos\executer_programme.cpp(15) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
                c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : voir la déclaration de 'strcpy'
                c:\programmation\cmdos\c++\cmdos\cmdos\executer_programme.cpp(17) : error C2664: 'CreateProcessA' : impossible de convertir le paramètre 9 de 'STARTUPINFO *' en 'LPSTARTUPINFOA'
                Les types pointés n'ont aucun rapport entre eux ; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
                Le journal de génération a été enregistré à l'emplacement "file://c:\Programmation\CMDOS\C++\CMDOS\CMDOS\Debug\BuildLog.htm"
                CMDOS - 1 erreur(s), 1 avertissement(s)
                ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========



                PS j'ai corriger 1 erreur
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  26 février 2008 à 21:22:56

                  MatteX >> bien portable comme solution.
                  Sinon regarde du coté de exec*
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 février 2008 à 17:45:58

                    je ne trouve pas comment ça marche.

                    Quelqu'un a la solution à mon problème?(code de MatteX)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 février 2008 à 19:42:26

                      1. #ifdef LINUX
                      2. system("bin/monprog");
                      3. #endif
                      4. #ifdef WINDOWS
                      5. system("bin\\monprog.exe");
                      6. #endif

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 février 2008 à 1:23:48

                        Citation : Davidbrcz

                        MatteX >> bien portable comme solution.
                        Sinon regarde du coté de exec*



                        Je plussoie. Portabilité toujours !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mars 2008 à 14:05:36

                          Je ne peux te conseiller que system (ca sert a executer du batch sans fichier batch et sans @echo off).
                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 mars 2008 à 15:08:47

                            merci, mais j'ai essayé system et exec mais je ne trouve pas comment ça marche.
                            mais si quelqu'un peut me donner la solution pour le code de mattex, ca serait sympa.

                            P.S un programme en console s'execute dans la même console ou dans une autre?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 mars 2008 à 17:48:29

                              Citation : bisthebis

                              Je ne peux te conseiller que system (ca sert a executer du batch sans fichier batch et sans @echo off).



                              Mais non!!!
                              system sert à envoyer des trucs à un interpréteur de commande, il fonctionnnera sous Windows et Linux.
                              Tout ce qu'il fait, c'est recevoir une chaîne qui correspond à une commande à exécuter.

                              Aucun rapport avec le batch.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 mars 2008 à 18:31:11

                                Citation : Mic32768

                                Citation : bisthebis

                                Je ne peux te conseiller que system (ca sert a executer du batch sans fichier batch et sans @echo off).



                                Mais non!!!
                                system sert à envoyer des trucs à un interpréteur de commande, il fonctionnnera sous Windows et Linux.
                                Tout ce qu'il fait, c'est recevoir une chaîne qui correspond à une commande à exécuter.

                                Aucun rapport avec le batch.



                                Je dois avouer que la définition de bisthebis n'était pas précise alors que la tienne oui mais peux-tu vraiment me dire que le batch ne sert pas à envoyer des commandes à l'interpréteur?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 juin 2008 à 16:11:25

                                  Citation : MatteX

                                  Citation : Mic32768

                                  Citation : bisthebis

                                  Je ne peux te conseiller que system (ca sert a executer du batch sans fichier batch et sans @echo off).



                                  Mais non!!!
                                  system sert à envoyer des trucs à un interpréteur de commande, il fonctionnnera sous Windows et Linux.
                                  Tout ce qu'il fait, c'est recevoir une chaîne qui correspond à une commande à exécuter.

                                  Aucun rapport avec le batch.



                                  Je dois avouer que la définition de bisthebis n'était pas précise alors que la tienne oui mais peux-tu vraiment me dire que le batch ne sert pas à envoyer des commandes à l'interpréteur?



                                  c'est ça que je voulais dire (à moitié en fait) mais je me suis mal exprimé :-°
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Executer un programme

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown