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

 Delphi Discussion :

Exe écrit avec D7 lancé en ligne de commande, s’ouvre dans le répertoire du programme qui le sollicite


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut Exe écrit avec D7 lancé en ligne de commande, s’ouvre dans le répertoire du programme qui le sollicite
    Bonjour

    Exe écrit avec D7 lancé en ligne de commande, s’ouvre dans le répertoire du programme qui le sollicite pas dans le sien

    Comment ce fait-il qu’un programme écrit avec D7 lancé en ligne de commande, s’ouvre dans le répertoire du programme qui le sollicite ?
    C’a se passe pourtant bien avec par exemple Word ou Notepad, mais pas avec mon programme écrit en Delphi !

    Je dois utilise PLSQL/DEV pour consulter des bases Oracle,
    Quand une requête me ramène un champ <LONG>, ce logiciel n’affiche qu’une grille avec la possibilité de voir ce champ LONG dans un memo qu’il appelle un EDITEUR DE DONNEES
    Cet EDITEUR DE DONNEES me donne la possibilité de choisir un éditeur extérieur à l’application (Word, Notepad …….)
    Ces données doivent être transférées sur un serveur distant par FTP (SFTP pour être plus précis), ensuite exploité avec quelques commandes Shell et enfin récupérer sur un poste de travail XP

    J’ai conçus un programme ave D7 qui fait très bien toutes ces tâches, et qui aussi accepte les lignes de commande, mais pas de pot l’Exe s’ouvre dans le répertoire de celui qui lui envoi la ligne de commande et pas son propre répertoire, comme mon Exe a besoins de pas mal d’autre infos, ces propre répertoires et ressources, il ne trouve rien

    Le programme appelant ce trouve dans : C:\Program Files\PLSQL Developer\
    Celui qui reçoit la ligne de commande dans : D:\bd\export5\explort2.exe

    L’exécutable est bien lancé, récupère bien les infos que je lui passe en lignes de commande, MAIS dans le répertoire du programme appelant, ce que je ne veux pas
    C’est d’autant surprenant que si je fais la même manip avec Word ou Notepad, c’a se passe bien( l’Exe se suffit peut-être à lui-même, ce qui n’est pas mon cas)

    Merci de vos réponses,
    Henri

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pour régler le problème il faut que le programme appelant gère le WorkDir de l'application appelée.

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 226
    Points : 28 221
    Points
    28 221
    Par défaut
    Comment ce fait-il qu’un programme écrit avec D7 lancé en ligne de commande, s’ouvre dans le répertoire du programme qui le sollicite ?
    C’a se passe pourtant bien avec par exemple Word ou Notepad, mais pas avec mon programme écrit en Delphi !
    Non ça se passe exactement pariel avec Notepad ou Word ou tout autre programme et c'est un fonctionnement tout à fait normal.
    C'est juste que Word ou Notepad ne tienne pas compte du répertoire courant

    D'une part, ton programme en D7 est mal conçu, s'il doit chercher des fichiers spécifiques dans son arborescence, il ne doit pas le faire dans le répertoire courant (qui change en permanence même durant l'exécution) mais il doit les chercher dans le répertoire de l'exécutable.

    D'autre part, suivant comment tu lance l'exécutable tu peux peut-être passer comme info au shell le répertoire de lancement (comme c'est le cas avec les racourcis). Cela aura pour effet d'initialiser le répertoire courant pour cette exécution.
    Mais encore une fois, ton programme ne devrait pas se baser sur le répertoire courant pour chercher ses fichiers.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    Pour régler le problème il faut que le programme appelant gère le WorkDir de l'application appelée
    Comment le renseigner

    D'une part, ton programme en D7 est mal conçu, s'il doit chercher des fichiers spécifiques dans son arborescence, il ne doit pas le faire dans le répertoire courant (qui change en permanence même durant l'exécution) mais il doit les chercher dans le répertoire de l'exécutable.
    Le répertoire courant de qui, de quoi
    Je ne saisi pas cette notion ?

    Tous les fichier sont bien ordonné dans leurs sous répertoires respectif(trois), le répertoire de l’application est toujours D:\bd\export5\
    Quand je le lance avec un raccourcis, il ne me pose aucun problème
    Si je le lance avec le menu demarrer/executer….. de Windows pas de problème non plus
    La ligne de commende ressemble à ceci : D:\bd\export5\excel2.exe m66 HenriG @free.fr

    Il est possible que j’ai mal conçus ce programme et dans ce cas quel serons les modifications a y apporter pour pouvoir le lancer en ligne de commande ?

    Merci de vos réponses,
    Henri

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 226
    Points : 28 221
    Points
    28 221
    Par défaut
    Tu accède à tes fichiers probablement en n'indiquant que le chemin relatif (juste les sous-répertoires et nom de fichiers) ou alors en créant le chemin complet des fichiers en utilisant le répertoire courant.

    Dans les 2 cas, tu pars du répertoire courant, hors celui-ci peut ne pas être le répertoire d'installation de l'exécutable. De plus il peut changer plusieurs fois au court de l'exécution (il suffit d'ouvrir une boite de dialogue et de parcourir un autre dossier).

    Tu dois ouvrir tes fichiers par un chemin absolu (ou complet si tu préfère). Tu dois construire ce chemin à partir du dossier de l'exécutable + les sous-dossiers + le nom du fichier.
    De mémoire, tu peux récupérer le dossier de l'exectubale en utilisant (je crois) l'instruction suivante : ExtractFilePath(Application.ExeName).

    Ainsi tu t'affranchis, non seulement du dossier d'installation qui peux changer d'une machine à l'autre, mais aussi du dossier courant qui, lui, change en permanence.

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Henri-gp Voir le message
    Comment le renseigner
    Ma boule de cristal est en panne et je ne peux malheureusement pas deviner le code que tu utilises pour appeler l'application

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Henri-gp, Quel est ton Os, xp, Vista, Seven 32bits ou 64bits ?

    Quel est le code que tu utilises pour appeler l'application ?

    Sinon dans le oncreate :

    chappli et monfichier = variable de type String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    chappli := ExtractFilePath(Application.ExeName);
     
    monfichier := chappli + '\fichier.jpg' ;
    @+,

    Cincap

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    Bonjour

    Malgré votre suggestion de modifs realisé, j’ai toujours la même erreur
    J’utilise << GetCurrentDir>> comme commande pour trouver le chemin complèt,
    Ensuite je charge x fichiers de cette façon dans des stringlist avec : lst_dev_ass_vie.LoadFromFile(getcurrentdir + '\dev\ass_vie.src');
    C’a s’est toujours bien passé !
    Mon programme comporte une bonne quinzaine d’unités, la fenêtre principale a plus de 7000 lignes, il est donc difficile de le mettre en ligne

    Le programme appelant est PL/SQL Developer de AllroundAutomations http://www.allroundautomations.com/plsqldev.html
    Un truc assez sérieux et certainement connu de pas mal de gens sur ce forum
    La fenêtre qui déclenche cette ligne de commande est l’EDITEUR DE DONNEE DE GRANDE TAILLE, l’onglet Externe offre la possibilité d’appeler un programme externe comme Word, Notepad ou souvent dans mon cas UltraEdite-32
    Comme son nom l’indique, cette fenêtre sert à éditer des données oracle <LONG, BLOB, CBLOB et autre de grande taille>
    Je n’ai que deux choix dans cette fenêtre, l’extension du fichier (pour moi TXT) et le chemin du programme que je veux appeler (pour moi c:\bd\export5\excel2.exe)

    Merci de vos suggestions a venir ou autres idée de modifs

    Henri

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 453
    Points : 1 337
    Points
    1 337
    Par défaut
    @ Henri-gp, Quel est ton Os, xp, Vista, Seven 32bits ou 64bits ?

    Les chemins sont différents !

    et quel code ou fonctions tu utilises pour charger "c:\bd\export5\excel2.exe"

    ou places tu "GetCurrentDir" ?

    @+,

    cincap

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    ce programme tourne sous Windows XP Professionnel sp 3 version 2002

    Y a une coquille dans ma réponse, le chemin de mon exe est d:\bd\export5\excel2.exe

    Cette ligne est bien dans TForm1.FormCreate(Sender: TObject); donc au début pour moi !
    lst_dev_ass_vie.LoadFromFile(getcurrentdir + '\dev\ass_vie.src');

    A propos : comment utiliser le debugger quand c’est une appic exterieur qui appele le programme( j’ai pas reussis !) ?

    Henri

  11. #11
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 292
    Points : 1 944
    Points
    1 944
    Par défaut
    Ce devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lst_dev_ass_vie.LoadFromFile(IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'dev\ass_vie.src');

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 815
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 815
    Points : 13 532
    Points
    13 532
    Par défaut
    Pour éviter de repasser à travers tout le code, tu peux forcer le répertoire de travail ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetCurrentDir(ExtractFilePath(Application.ExeName));

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 237
    Points : 150
    Points
    150
    Par défaut
    SetCurrentDir(ExtractFilePath(Application.ExeName)); est la commande qu’il me fallait, c’est la perfection, Merci Andnotor

    Ceci soulève une nouvelle question : comment utiliser le debugger quand c’est une application extérieur qui appelle le programme( j’ai pas réussis !) ?

    Henri

Discussions similaires

  1. [Débutant] Créer un exe avec des arguments de ligne de commande
    Par Gigli dans le forum VB.NET
    Réponses: 1
    Dernier message: 06/02/2012, 09h35
  2. [XL-2000] Lancement d'executables avec Shell, générer des lignes de commande du CMD
    Par Gautier.B dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2009, 09h29
  3. Réponses: 1
    Dernier message: 17/03/2009, 10h10
  4. Réponses: 3
    Dernier message: 17/04/2008, 15h01
  5. argument avec espace passé en ligne de commande
    Par gorgonite dans le forum Langage
    Réponses: 9
    Dernier message: 07/05/2007, 23h07

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