OK - c'est un scénario très bizarre, et j'ai des problèmes pour essayer d'en comprendre le fond.
J'ai 2 applications (disons simplement app1 et app2) et un fichier texte (txt1).
App1 et txt1 résident dans le même répertoire (disons C:\APP), mais app2 réside dans un sous-répertoire du répertoire de app1 (C:\APP\SUB).
Quand App1 démarre, il lit des choses de txt1 en utilisant le standard :
AssignFile(txtFile,'txt1.txt');
Reset(txtFile);
Aucun problème avec ça. Cependant, quand App2 lance App1 via une commande shellexecute :
shellexecute(0,'open','..\app1.exe',nil,nil,SW_SHOW);
App1 ne semble pas voir le fichier texte. J'obtiens une réponse disant 'Fichier spécifié introuvable'. Bizarre.
J'ai débuggué en ajoutant :
if not fileexists('txt1.txt') then
showMessage(ExtractFilePath(application.exename));
Et cela montre le bon chemin du fichier de app1 (lui-même), donc, pourquoi alors, la commande 'reset' produit l'erreur 'Introuvable....'? Je me demande si utiliser shellexecute fait en sorte que l'application pense d'une manière ou d'une autre qu'elle s'exécute à partir du sous-répertoire plutôt que du répertoire réel dans lequel elle se trouve?
Je comprends que la solution la plus simple est d'ajouter simplement le chemin du fichier au début de chaque fichier que mon 'app1' ouvre (j'ai essayé et oui, ça fonctionne correctement), cependant, en réalité, il y a des centaines de fichiers auxquels cette application principale accède par une méthode similaire (que ce soit des fichiers txt, ini ou dll) c'est-à-dire en attribuant le fichier en fonction du fait qu'il se trouve dans le même répertoire que l'application, donc sans spécifier le chemin complet du fichier, donc les changer (et les maintenir) tous n'est pas quelque chose qui nous intéresserait de faire à ce moment.
Est-ce que quelqu'un a déjà vu quelque chose comme ça auparavant? Y a-t-il un meilleur moyen pour moi de faire lancer App2 lance App1 autre que ShellExecute? Il n'y a pas de paramètres ou quoi que ce soit à transmettre à App1, j'ai juste besoin qu'il démarre.
Merci pour votre temps - faites moi savoir si vous avez besoin de quelque chose d'autre sur ce sujet!