Partage
  • Partager sur Facebook
  • Partager sur Twitter

Imposer un répertoire d'exécution pour une commande lancée via la fonction system()

    26 décembre 2006 à 3:48:24

    Coucou ! :)

    Suite à ce topic, j'ai un peu cogité sur la manière dont j'allais m'y prendre pour executer un jeu à partir d'une URL cliquable dans un navigateur web et lui transmettre les données de l'URL en guise de paramètres de ligne de commande :

    On m'a bien conseillé et en bidouillant la base de registres de Windows, j'ai réussi à faire en sorte que mon lien exécute le jeu en question... toutefois, la manière dont les paramètres sont transmis ne convient pas au jeu et je dois donc programmer une toute petite application en C qui servira d'intermédiaire... son but étant de formater les données reçues par l'URL pour constituer une chaîne de caractère qui, une fois concaténée au nom de l'executable du jeu, peut être utilisée dans une fonction telle que system() pour executer la ligne de commande correcte qui permettra de démarrer le jeu et de se connecter immédiatement à un serveur.

    Je sais que j'aurais pu utiliser un batch pour effectuer le formatage des données tranmises par l'URL et que ca m'éviterait de passer par un programme intermédiaire mais vu que ce n'est pas trop mon dada, je préfère gérer cela par une petite application...

    Donc, je résume tout ce qui fonctionne bien pour le moment :

    1. Je clique sur une URL de type nomdujeu:adresse.ip.du.serveur:21000 et grâce à une entrée dans la base de registre, ma petite application "launcher.exe" située dans le répertoire du jeu est bel et bien executée.

    2. Par ailleurs, elle reçoit la chaine de caractère "nomdujeu:adresse.ip.du.serveur:21000" en guise de paramètre dans argv[1] ! Avec une petite manipulation, je supprime très facilement la partie "nomdujeu:" pour ne conserver que ce qui vient après... c'est à dire : "adresse.ip.du.serveur:21000"

    3. A partir de la, j'effectue une concaténation entre le chemin de l'exécutable du jeu, le nom de l'exécutable du jeu et la chaîne de caractère précédemment obtenue dans le point 2... ce qui donne une chaîne de caractère comme ceci :

    start D:\\IL-2 Sturmovik\\il2fb.exe +connect adresse.ip.du.serveur:21000

    Bref, jusque là, tout allait pour le mieux. j'ai mis quelques printf pour m'assurer que la ligne de commande est correcte et c'est le cas. D'ailleurs, le jeu démarre mais... il plante au bout de 2 secondes. J'ai trouvé pourquoi :

    Apparemment, malgré le fait que mon "launcher.exe" se trouve bel et bien dans le répertoire du jeu, son exécution (et donc celle du jeu via la fonction system()) se fait à partir du répertoire de Firefox... c'est à dire "C:\Program Files\Mozilla Firefox\" ... un peu comme si j'effectuais ceci dans la console :

    C:\Program Files\Mozilla Firefox>start D:\IL-2 Sturmovik\il2fb.exe +connect adresse.ip.du.serveur:21000


    Dans un sens, c'est normal puisque le "launcher.exe" est executé à partir d'un lien que je clique dans Firefox. Hélas, c'est cela qui provoque le plantage car j'ai testé exactement la même ligne de commande à partir du répertoire du jeu comme ceci :

    D:\IL-2 Sturmovik>start D:\IL-2 Sturmovik\il2fb.exe +connect adresse.ip.du.serveur:21000


    ... et là, aucun problème !

    Tout cela pour demander si quelqu'un sait comment imposer le répertoire à partir duquel une commande tapée dans la fonction system() sera executée... :euh:

    J'ai essayé en multipliant les appels à la fonction system() de la manière suivante :

    system("d:");
    system("cd d:\\IL-2 Sturmovik");
    system("start D:\\IL-2 Sturmovik\\il2fb.exe +connect adresse.ip.du.serveur:21000");


    ... mais ca passe pas. Les commandes sont bien executées mais le problème persiste, comme si le répertoire d'exécution restait celui de Firefox...

    Merci d'avance pour votre aide... et espérons que la nuit me portera conseil !

    Bonne nuit à vous. :)
    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2006 à 4:16:16

      De manière portable, c'est impossible !

      Par contre, il est très très très vraisemblable que ton programme soit destiné à être éxécuté sous Windows.
      Dans ce cas, essaye un tout bête
      system("d:"); system("cd \"IL-2 Sturmovik\"");
      ^^
      Par contre, ça va te demander d'analyser le chemin pour en separer :
      1)le disque dur
      2)le chemin depuis la racine de ce disque
      Ce qui est... assez simple :p

      Bon courage, en esperant que ça fonctionne ! ;)
      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2006 à 4:19:15

        Je ne sais pas si tu as lu en entier le premier lien que je t'avais donné dans l'autre topic, mais... Peut-être que cette sous partie du tuto pourrait t'aider !
        • Partager sur Facebook
        • Partager sur Twitter
        Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
          26 décembre 2006 à 8:16:41

          Lol si tu veux un conseil quand quelqu'un te file un liens même si c'est pas exactement ce que tu cherchais tu devrais lire :p (moi j'ai tout lu et j'en ai rien a "%$!&?%$#@#$*&" pour le moment mais quand j'aurais à bidouiller des truc avec les arg je saurai c'est quoi et a peu près comment faire ^^.

          Sinon ta réponse ce trouve dans le lien que iNaKoll t'a gentillement fillé.
          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2006 à 12:56:52

            Arf, tu as entièrement raison... la fonction chdir() sera certainement très utile dans le cas présent... :)

            Merci à vous. Je teste et je reviens pour mettre le gros V tout vert ! :p
            • Partager sur Facebook
            • Partager sur Twitter

            Imposer un répertoire d'exécution pour une commande lancée via la fonction system()

            × 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