Bonjour,

J'ai commencé à migrer un petit projet perso diffuser gratuitement sur le net pour changer d'EDI : passage de Delphi 7 à Delphi 10.1.

J'ai passé les erreurs de compilation dues aux évolutions du compilateur. Maintenant ça compile.

Le problème suivant apparait au lancement de l'application, lorsqu'elle a besoin d'accéder à son fichier .ini.

Mon appli peut être installée via un installateur (construit avec Innosetup), ou via la décompression d'un zip. Dans le premier cas le fichier ini est déposé dans {commonappdata}\monAppli, commonappdata correspondant à C:\ProgramData\monAppli\monAppli.ini

Dans le 2° cas, le fichier ini est dans le répertoire de l'appli

Au lancement, mon appli test la présence d'un fichier ini dans commonappdata, s'il le trouve il l'utilise. Ou plutôt, je croyais qu'il l'utilisait

En changeant de compilateur, j'ai un plantage lors de la première écriture dans le fichier (impossible d'écrire), alors que la lecture se passe bien. Je debug, et constate que les valeurs lues ne sont pas conformes à ce que j'attendais. Après recherche, voilà ce que j'ai trouvé : mon appli utilise CSIDL_COMMON_APPDATA. Le debuger delphi 7 m'indique bien qu'il s'agit du chemin C:\ProgramData\monAppli\monAppli.ini, et pourtant il ne lit pas la bonne valeur.
Dans les fait, il me créé un fichier à cet emplacement : C:\Users\<account>\AppData\Local\VirtualStore\Program Files\monAppli\monAppli.ini

Le debuger Delphi 10.1 m'indique la même chose (C:\ProgramData\monAppli\monAppli.ini), mais à la différence qu'il utilise réellement ce fichier, et là problème : la lecture du fichier se passe bien, mais l'écriture provoque une exception disant que l'écriture est impossible. Le fichier n'est pas en lecture seule. Par contre je ne peux pas le modifier, même avec Notepad, et je ne comprends pas pourquoi...

Quelqu'un saurait m'expliquer ces comportements et commun coder quelque chose de propre en assurant la compatibilité ascendante pour mes utilisateurs ?

Merci pour votre aide !