Bonjour,
J'ai créé un programme sous Delphi que j'utilise pour gérer différents fichiers ayant la même structure.
Pour cela, j'ai l'arborescence suivante :
- Dossier Application
Programme PGM (mon programme)
- Dossier fichiers1
lien vers PGM
- Dossier Database
- Dossier fichiers2
lien vers PGM
- Dossier Database
- Dossier fichiers3
lien vers PGM
- Dossier Database
- Dossier fichiers4
lien vers PGM
- Dossier Database
etc...
Quand j'apporte des modifications à mon programme, cette structure me permet de n'avoir à remplacer que le programme contenu dans le dossier "Dossier Application".
Pour l'exécution, j'utilise des raccourcis où il me suffit d'appeler le lien contenu dans tel ou tel dossier. Dans mon programme Delphi, je récupère le path du dossier fichiersn :
WCheminExe := ExtractFilePath(ParamStr(0));
Ensuite, pour paramétrer le chemin de mes fichiers, je n'ai plus qu'à faire :
WCheminDatabase := WCheminExe + 'Database/';
Tout cela fonctionne parfaitement.
Je suis passé sous Linux depuis plusieurs années (Fedora 29, environnement XFCE). Mon programme (Delphi) est exectué sous Wine. J'ai créé des lanceurs qui appellent eux aussi le lien du Programme PGM. Tout cela fonctionne comme avant.
Et c'est maintenant que ça se complique :
J'ai repris mon programme avec Lazarus (Linux), et là, plus moyen d'obtenir le path du dossier contenant le lien (dossier contenant "dossier Database"). J'obtiens à la place le chemin de l'exécutable ("Dossier Application"). J'ai fait moult recherches, mais je n'ai toujours pas trouvé LA solution.
Jai trouvé cette solution :
WCheminExe := FExpand(WFilePath); (mettre DOS dans les uses)
Ça fonctionne bien si je clique directement sur le lien, dans le dossier "fichiern". Mais ce n'est pas une solution pratique. Et quand je crée un lanceur (comme pour le même programme Delphi/Windows sous Wine), j'obtiens "/home/moi".
J'ai essayé de créer un petit programme bash pour initialiser un petit fichier contenant le résultat de la commande PWD, fichier que je lis au début de mon programme. Le fichier se crée bien avec le bon dossier. Problème, quand le lance mon programme à partir du lanceur, mon programme Lazarus ne peut retrouver ce fichier.
J'en déduis que dans tous les cas, le path actif est celui du lanceur.
Je pense à ces options :
1) créer un programme Lazarus qui retrouve le bon path et appelle directement le programme PGM avec passage de paramètres. Le lanceur n'aurait qu'à appeler ce petit programme.
2) utiliser une variable d'environnement.
Autre solution possible ?
Mais pourquoi donc ce qui fonctionnait parfaitement avant me pose tant de problèmes ?
Partager