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 :

Lancement automatisé d'un process c++ et current directory


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut Lancement automatisé d'un process c++ et current directory
    Bonjour
    Je suis entrain de développer une application sur C# qui sert à lancer un programme exe en C++ sous différentes versions de paramètres d'entrée.
    Le problème est la suivante :
    Le programme C# se trouve dans le répertoire \X\monprograme.exe alors que le programme C++ se trouve dans des sous-rép de X (X\V1 , X\V2 , X\V3)
    alors le path complet est X\V1\progc.exe , X\V2\progc.exe , X\V3\progc.exe
    Le problème pour moi est le suivant : le fichier exe du C++ essaie de faire lecture d'un fichier txt et écriture d'un fichier txt alors que si le programme est lancé par l'application C# le path du current_directory dans le programme C++ n'est pas correcte au lieu d'être X\V1\ elle est X\ seulement.
    J'ai essaie de prendre la « current directory » du programme C++ et l'afficher sur l'écran par la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string getCurrentDirectoryOnWindows()
    {
        const unsigned long maxDir = 260;
        char currentDir[maxDir];
        GetCurrentDirectory(maxDir, currentDir);
        return string(currentDir);
    }
    Pourquoi j'ai ce type de problème et comment peut-on le résolu ?

    Merci
    Cordialement

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    En fait, c'est exactement le comportement normal.
    La "current directory", ou "working directory", c'est à dire le chemin d'exécution, est le chemin d'où est appelé le programme.

    Ce chemin ne change pas à chaque sous-programme, car c'est une propriété de l'environnement d'exécution.
    Il faut savoir que ce chemin influe aussi sur quelles dll sont accessibles.

    En script de commandes, on utiliserait la commande "cd" (change directory) pour déplacer le point d'appel dans le dossier contenant le sous-programme.

    La faute, c'est que le programme C++ suppose être appelé depuis son dossier (ce qui est le cas lorsque tu le lances manuellement).
    Il se peut qu'il ait une option permettant de spécifier le chemin vers ses ressources.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    Les API .NET de lancement de processus permet de spécifier le working directory du processus à créer.
    https://msdn.microsoft.com/en-us/lib...code-snippet-1

  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Merci pour vous
    problème résolu

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Ma solution était de créer un petit programme en C# comme intermédiaire dans le même rép que le programme C++ et effectuer le changement du currentdirectory dans le programme intermédiaire et ce programme a pour rôle de lancer le programme C++

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 071
    Points : 12 116
    Points
    12 116
    Par défaut
    La belle usine à gaz !!!
    NON.
    Le plus simple, c'est de spécifier correctement le working directory lors du lancement du processus fils.
    Cf. le lien que j'ai déjà posté.

  7. #7
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 384
    Points
    384
    Par défaut
    Merci oui ça va mieux avec votre idée

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

Discussions similaires

  1. Lancement automatisé d'un script shell
    Par mixka13 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 17/03/2009, 10h23
  2. Fichier config et current directory
    Par skunkies dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/12/2008, 11h47
  3. Réponses: 1
    Dernier message: 14/06/2008, 10h49
  4. probleme entre current directory et ligne de commande
    Par WArnaud dans le forum Windows
    Réponses: 6
    Dernier message: 27/02/2008, 23h39
  5. Lancement automatisé d'un script à un temps donné
    Par denn dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 11/10/2006, 11h04

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