Page 1 sur 1

[Résolu] GetCurrentDirectory() renvoi rien en exécutable

Publié : mer. 23/mai/2007 9:41
par Jacobus
Un problème qui me surprend depuis deux jours je ne récupère plus le chemin des répertoires et autres avec GetCurrentDirectory()

Si je défini le dossier principal avec, tout fonctionne en mode debug mais pas en exécutable.

Code : Tout sélectionner

Global DIR$
DIR$ = GetCurrentDirectory()
If FileSize(DIR$+"Mon dossier")=-1
 CreateDirectory(DIR$+"Mon dossier"):EndIf
Ce code une fois compilé en exe me crée le dossier sur le bureau!!
Si je l'utilise pour ouvrir un fichier, il ne le trouve pas. Une idée?

Publié : mer. 23/mai/2007 10:38
par KarLKoX

Code : Tout sélectionner

curdir.s = Space(#MAX_PATH)
GetModuleFileName_(GetModuleHandle_(0), @curdir, #MAX_PATH)
Fonctionnera à coup sûr, ce n'est pas un problème de PB mais de processus dans un contexte donné (debug = module différent).

Publié : mer. 23/mai/2007 10:56
par Jacobus
Merci KarlKoX, on va adopter cette formule par sécurité.

Mais j'ai trouvé l'origine de mon problème qui survenait en créant une icône de raccourci via un installeur. Car en lançant l'appli depuis le dossier où elle est, pas de problème. Lors de la création de l'icône à l'install, le chemin "Démarrer dans" disponible dans les propriétés de l'icône, n'était pas inscrit. D'où l'usage du bureau par défaut et les em***des qui en découlent...

Deux jours :roll: que je cherche cette co****ie ! deux jours que je debugge dans tous les sens pour rien et que j'aurai dû mettre en ligne ma suite, AARRHH!! je suis furax, mais à un point!!

Publié : jeu. 24/mai/2007 7:21
par lionel_om
Fais un :

Code : Tout sélectionner

MessageRequester("", GetCurrentDirectory(), 0)
Car t'as peut-être un pb de "/" ou "\"

:wink:
Lio

Publié : jeu. 24/mai/2007 22:03
par Jacobus
Je te remercie Lio, mais c'est la première chose que j'ai testé, le retour de GetCurrentDirectory() et qui me donne bien le chemin du répertoire courant. Le plus surprenant est qu'avec le code de KarlKoX je parviens a extraire le même chemin mais ainsi il est parfaitement pris en compte par le programme, ce qui n'est pas le cas autrement. j'avoue que c'est curieux et que cela me pose quelques soucis... à suivre.

Publié : jeu. 24/mai/2007 22:08
par KarLKoX
Le bureau est un dossier spécial qui change le module appelant, c'est à dire que ton programme est lancé par un autre processus et c'est son module qui est pris en compte et donc, son chemin.
Ceci explique pourquoi ton dossier est créé sur le chemin de celui ci, à savoir, sur le bureau ;)
Une autre astuce consiste à créer une clé dans la bdr lors de l'installation de ton programme (ou du premier lancement) et de faire un SetCurrentDirectory_(lpPath.s) au tout début de ton code.

Publié : jeu. 24/mai/2007 22:21
par Jacobus
Merci de ces lumières, je comprend mieux la chose maintenant. Pour l'icône de raccourci j'ai choisi l'option de la créer au premier lancement du programme dans le programme avec les paramètres nécessaires, et je ne la propose plus dans l'installeur. Ca fonctionne correctement.

Par contre cela soulève d'autres questions et je crois qu'il faut que je revois certains paramètres, notamment avec RunProgram() qui pourrait poser quelques problèmes du même style, notamment avec les threads. Par exemple en démarrant plusieurs applis qui elles mêmes utilisent des threads.