Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Démarrer prog en même temps que Windows

3 réponses
Avatar
WonderMan
Bonjour,

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.

3 réponses

Avatar
WonderMan
WonderMan avait énoncé :
Bonjour,

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 ?



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 ?
Avatar
Christian ASTOR
WonderMan wrote:

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()
Avatar
WonderMan
Christian ASTOR a utilisé son clavier pour écrire :
WonderMan wrote:

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.