Partage
  • Partager sur Facebook
  • Partager sur Twitter

lancer un .exe avec un programme c

Sujet résolu
    8 novembre 2022 à 20:10:31

    Bonjour, après quelque recherche je ne trouve pas comment ouvrir un exécutable avec le langage c.

    J'ai vue sur d'autre forum qu'il existe la fonction system() mais cette fonction ne fait pas se que je veux, elle affiche la compilation de mon .exe (en plus c'est une fonction c++ pas c ^^").
    Je voudrais créer un logiciel qui me permettrait de choisir entre quelque logiciel pour me facilité la vie.
    (Je suis sous Windows 10 avec Visual studio).

    Merci a se qui prendront de leur temps pour m’aidée ^^ !

    • Partager sur Facebook
    • Partager sur Twitter
      8 novembre 2022 à 21:45:08

      Il me semble que c'est bien la fonction "system" qui répond à ta demande. Et c'est une fonction du langage C.

      J'ai un programme qui crée un fichier postscript et le convertit en PDF. Je ne me suis pas embêté, j'ai utilisé 'system' :

      sprintf(commande, "ps2pdf %s.ps\n", Page.nom) ;
      system(commande) ;

      Ici 'commande' est une chaîne de caractères destinée à recevoir la commande à exécuter, et 'Page.nom' est le nom de la carte. Par exemple si le nom est "carte01", la première ligne mettra dans 'commande' la chaîne "ps2pdf carte01.ps\n", et la deuxième ligne exécutera 

      ps2pdf carte01.ps

      ce qui créera le fichier "carte01.pdf".

      -
      Edité par robun 8 novembre 2022 à 21:45:40

      • Partager sur Facebook
      • Partager sur Twitter
        9 novembre 2022 à 1:23:26

        > cette fonction ne fait pas se que je veux, elle affiche la compilation de mon .exe
        Quelle commande entres tu comme paramètre pour system? Que voudrais-tu faire?
        > (en plus c'est une fonction c++ pas c
        Une fonction? On peut compiler ce qu'on veut ou faire autre chose.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          9 novembre 2022 à 1:38:45

          @PierrotLeFou

          La commande que j'ai entrée dans system est :
          char command[2000];
          system(command, "chemin d'accèe de mon .exe a exécuté");

          mon but et de crée une liste avec des printf, ou j'entre le numéro du programme a exécuté et le switch se charge d'exécuter le bon programme.

          (Tout ça je sais faire j'en avais déjà fait auparavant ce que j'arrive pas à faire c'est d'exécuter mon .exe)

          > (en plus c'est une fonction c++ pas c
          Une fonction? On peut compiler ce qu'on veut ou faire autre chose.

          par a port au c++ et au c je pensais que c’était juste en c++, car j'ai connu la fonction system (si ces une fonction) sur un forum c++ d'OpenClassrooms.

          Et pour répondre à @robun, je pense avoir fait a peut pré pareil.

          -
          Edité par firisleny 9 novembre 2022 à 1:50:49

          • Partager sur Facebook
          • Partager sur Twitter
            9 novembre 2022 à 3:20:33

            La documentation de la fonction system:


            https://koor.fr/C/cstdlib/system.wp


            Je ferais:
            char commande[2000];
            sprintf(commande, "...", ce que tu veux y mettre);
            system(commande);

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              9 novembre 2022 à 18:18:09

              @PierrotLeFou :

              #include <stdio.h>
              #include <stdlib.h>
              
              int main(int argc, char* argv)
              {
              	char commande[2000];
              	sprintf(commande, "C:\Users\Documents\Lanceur.exe");
              	system(commande);
              	return 0;
              }

              Cela ne marche pas, je vais lire la documentation que vous m'avez envoyer.

              -
              Edité par firisleny 9 novembre 2022 à 18:18:22

              • Partager sur Facebook
              • Partager sur Twitter
                9 novembre 2022 à 18:24:58

                Il faut doubler les \ ! (ou utiliser tout simplement des / [oui, oui, ça fonctionne sous windows] )

                -
                Edité par edgarjacobs 9 novembre 2022 à 18:27:45

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  9 novembre 2022 à 18:27:38

                  La syntaxe de sprintf() n'est pas bonne non plus.

                  sprintf(commande, "%s", "C:\\Users\\Documents\\Lanceur.exe");

                  https://cplusplus.com/reference/cstdio/sprintf/

                  -
                  Edité par Dlks 9 novembre 2022 à 18:29:08

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 novembre 2022 à 18:34:45

                    @dlks: ceci fonctionne (man sprintf),

                    sprintf(commande, "C:\\Users\\Documents\\Lanceur.exe");

                    mais alors autant utiliser strcpy()

                    • Partager sur Facebook
                    • Partager sur Twitter

                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      9 novembre 2022 à 18:37:35

                      @edgarjacobs @Dlksj'ai essayée avec vos instruction
                      #include <stdio.h>
                      #include <stdlib.h>
                      
                      int main(int argc, char* argv)
                      {
                      	char commande[2000];
                      	printf(commande, "%s", "C:\\Users\\Documents\\Lanceur.exe");
                      	system(commande);
                      	return 0;
                      }
                      j'ai mis un printf a la place d'un sprintf car mon ide disais que c'etait pas sécurisé (apre je vais maitre _CRT_SECURE_NO_WARNINGS mais sa ne change rien cela ne veux pas lancé mon .exe

                      -
                      Edité par firisleny 9 novembre 2022 à 18:40:30

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 novembre 2022 à 18:49:48

                        C'est sprintf() et pas printf() ces deux commandes sont différentes et ont des syntaxes différentes.

                        Pour ton compilateur Visual Studio qui décide de bannir des commandes standard du C tu as un topic sur SO qui détaille les différents moyens de le faire taire.

                        https://stackoverflow.com/questions/22450423/how-to-use-crt-secure-no-warnings

                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 novembre 2022 à 19:29:45

                          Sinon tu peux essayer (dans un premier temps)

                          system("C:\\Users\\Documents\\Lanceur.exe");



                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 novembre 2022 à 20:05:40

                            Ça marche ! mais dans le terminal j'ai une erreur :

                            -
                            Edité par firisleny 9 novembre 2022 à 20:06:58

                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 novembre 2022 à 20:10:31

                              Ça, c'est un autre problème.

                              Ne dois-tu pas, par exemple, changer de répertoire et/ou de disque avant de lancer la commande ?

                              Je suppose que c'est  lanceur.exe qui affiche "config file not found". Et si c'est bien ça, où va-t-il chercher son fichier de configuration ? Car si c'est un chemin relatif, tu dois émettre la commande à partir du disque/répertoire où se trouve lanceur.exe

                              -
                              Edité par edgarjacobs 9 novembre 2022 à 20:18:10

                              • Partager sur Facebook
                              • Partager sur Twitter

                              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                9 novembre 2022 à 21:24:24

                                @edgarjacobs c’était a peu pré ça, j'ai résolu le problème il fallait que je crée un .bat

                                cd C:\Users\Documents\fichier
                                start Lanceur.exe
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  9 novembre 2022 à 23:19:31

                                  Puisque tu es sous windows, tu pourrais écrire

                                  #include <stdlib.h>
                                  #include <windows.h>
                                  
                                  int main(void) {
                                  	....
                                  	
                                  	SetCurrentDirectory("C:\\Users\\Documents\\fichier");
                                  	system("lanceur.exe");
                                  	
                                  	....
                                  	
                                  	return(0);
                                  }

                                  plutot que d'avoir un .bat

                                  -
                                  Edité par edgarjacobs 9 novembre 2022 à 23:19:48

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                    10 novembre 2022 à 2:17:16

                                    Le changement de dossier n'est peut-être pas souhaitable pour le programme appelant. Une commande  cd  dans le script est peut-être préférable dans certains cas.
                                    Notes:
                                    + On peut écrire des "/" au lieu des "\" dans Windows (cmd).
                                    + On doit donner le suffixe approprié au script (ici .bat ou .cmd), mais on n'est pas obligé de le mentionner dans l'appel sous cmd.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Le Tout est souvent plus grand que la somme de ses parties.

                                      11 novembre 2022 à 0:32:07

                                      PierrotLeFou a écrit:

                                      Le changement de dossier n'est peut-être pas souhaitable pour le programme appelant

                                      Tu as raison. Alors pourquoi pas
                                      char curdir[MAX_PATH];
                                      GetCurrentDirectory(sizeof(curdir),curdir);
                                      SetCurrentDirectory(....);
                                      system(....);
                                      SetCurrentDirectory(curdir);
                                      

                                      -
                                      Edité par edgarjacobs 11 novembre 2022 à 0:32:26

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                        11 novembre 2022 à 1:17:20

                                        firisleny a écrit:

                                        @edgarjacobs c’était a peu pré ça, j'ai résolu le problème il fallait que je crée un .bat

                                        cd C:\Users\Documents\fichier
                                        start Lanceur.exe


                                        Je ne vois pas bien le rapport avec ta demande initiale. Tu voulais écrire un programme qui affiche un menu et, en fonction de l'option choisie, qui exécute un des programmes du menu (tu parlais notamment de 'switch').

                                        Pour moi, il faut utiliser la commande 'system', et tu le sais depuis le début. OK pour l'instant ça ne marche pas, mais ça n'empêche pas que c'est ce qu'il faut faire, c'est juste que tu ne gères pas bien les répertoires (mets-les dans le PATH, ce sera plus simple).

                                        Là, avec un batch, tu vas lancer un programme, mais comment faire le menu ?

                                        -
                                        Edité par robun 11 novembre 2022 à 1:19:02

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          11 novembre 2022 à 2:34:28

                                          J'ai supposé que le menu est dans le programme C qui appelle system() avec une commande correspondant au choix:
                                              char *menu[] = {
                                                 "programme1",
                                                 "programme2",
                                                  "programme3"
                                              };
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Le Tout est souvent plus grand que la somme de ses parties.

                                            11 novembre 2022 à 12:55:36

                                            Et il me semblait que ce qui ne marchait pas, c'était les appels du type

                                            system("programme1.exe");
                                            

                                            (ou

                                            system(menu[i]);

                                            c'est pareil)


                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              11 novembre 2022 à 14:40:39

                                              Ce n'est pas le menu qui lui posait problème, mais l'exécution du programme, à cause d'un mauvais choix / ajustement de dossiers.
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Le Tout est souvent plus grand que la somme de ses parties.

                                                11 novembre 2022 à 17:32:20

                                                PierrotLeFou a écrit:

                                                Ce n'est pas le menu qui lui posait problème.

                                                Bien entendu !

                                                PierrotLeFou a écrit:

                                                mais l'exécution du programme

                                                Quel programme ? Je croyais que c'était les différents programmes proposés dans le menu et appelés par 'system' dans un 'switch'. Était-ce en fait le programme qui appelle ces 'system' ? Je n'y crois pas : on n'a pas besoin d'appeler 'system' pour le lancer, lui : il suffit de taper son nom en console.

                                                -
                                                Edité par robun 11 novembre 2022 à 17:36:06

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                lancer un .exe avec un programme c

                                                × 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