J'ai développé un programme en C++ (MFC) qui utilise un fichier .INI
placé dans le même dossier que l'EXE pour récupérer des données dont il
a besoin au démarrage.
Il y a donc dans le code quelque chose du genre (en simplifiant) :
nomDossier = GetCurrentDirectory() ==> Récupère le dossier de l'EXE
nomFichier = nomDossier + "\\MonAppli.ini";
/.../
GetPrivateProfileString(xxx,xxx,xxx,nomFichierINI); ==> Lecture des
données dans le fichier INI
J'ai vérifié le fonctionnement, et tout marche parfaitement quand je
double clique sur l'EXE pour le lancer.
Seulement, j'ai ensuite voulu inscrire mon EXE dans la base de
registres pour que l'application démarre automatiquement lorsque
Windows démarre. Et là, je constate que si mon programme démarre bien
au démarrage de Windows, il se comporte exactement comme s'il ne
trouvait pas le fichier INI qui contient les données qu'il doit lire en
démarrant.
Je soupçonne fortement que dans ce cas précis, la fonction
GetCurrentDirectory() ne renvoie pas le bon nom de dossier (puisque
c'est sur elle que je me base pour créer le nom complet de mon fichier
INI), mais je ne comprend pas pourquoi. Et surtout, comment faire pour
que mon application démarre bien en même temps que Windows, mais arrive
à localiser son fichier INI ?
Merci de vos conseils et idées.
PS : J'ai bien pensé à mettre le fichier INI de mon application dans le
dossier de Windows, et remplacer l'appel à GetCurrentDirectory() par
GetWindowsDirectory(), ce qui pourrait peut-être résoudre le problème,
mais si c'était possible, je préfèrerais laisser le fichier INI dans le
même dossier que le fichier EXE ?
> Je soupçonne fortement que dans ce cas précis, la fonction
> GetCurrentDirectory() ne renvoie pas le bon nom de dossier
Il faut généralement utiliser GetModuleFileName()
Je testerai cette solution.
Merci de votre réponse.