X-Kalibur Posted August 14, 2005 Share Posted August 14, 2005 Voila le bout de code suivant : /* Verification du bon fichier */ char copy[500]; char current_long_path[500]; char current_short_path[500]; char destination_path[] = "c:\\mon_fichier.exe"; GetModuleFileName(NULL, current_long_path, 500); /* le chemin complet */ GetShortPathName(current_long_path, current_short_path, 500); /* transforme le chemin complet en version short (98) */ FILE *fichier = fopen ("c:\\mon_fichier.exe", "r"); /* essaye d'ouvrir le fichier */ if (fichier == NULL) { /* fichier inexistant */ /* creation de la command copy */ strcpy(copy, "copy "); strcat(copy, current_short_path); strcat(copy, " "); strcat(copy, destination_path); /* fin creation copy */ system(copy); system("cls"); ShellExecute(hwnd, NULL, destination_path, NULL, NULL, SW_NORMAL); /* exec du programme */ return 0; /* fermeture de ce programme */ } else { /* fichier existant */ if(strcmp(destination_path,current_long_path)>0 || strcmp(destination_path,current_long_path)<0) { /* verifie que c'est bien le bon exe qui est en cours d'execution */ ShellExecute(hwnd, NULL, destination_path, NULL, NULL, SW_NORMAL); /* exec du programme */ return 0; /* fermeture de ce programme */ } } Ce code permet de vérifier si l'exe existe bien à l'endroit indiqué, s'il existe pas il ce copie de lui même et ferme la mauvaise fenêtre pour relancer la bonne. Si il existe alors il vérifie si c'est bien cet exe qui est lancé et si non il ferme le mauvais pour lancer le bon. Mais le problème c'est que la fenêtre s’ouvre et ce ferme a l'infini, j'ai beau chercher je trouve pas mon erreur. La partie "/* fichier inexistant */" marche très bien lorsque je supprime la partie "/* fichier existant */" mais après ce n'est pas le cas. Merci d'avance. Link to comment Share on other sites More sharing options...
keneda212 Posted August 14, 2005 Share Posted August 14, 2005 bon apres avoir etudier ca tout les deux sur msn bilan s'il tourne en boucle, c'est qu'une partie soit dans le if soit dans le else continue a tourner : apparement pas de probleme pour le if (fichier qui n'existe pas, on copie et on relance par contre dans le else y'a plus de boulot : des chances que le if soit foireux /* fichier existant */ if(strcmp(destination_path,current_long_path)>0 || strcmp(destination_path,current_long_path)<0) { /* verifie que c'est bien le bon exe qui est en cours d'execution */ ShellExecute(hwnd, NULL, destination_path, NULL, NULL, SW_NORMAL); /* exec du programme */ return 0; /* fermeture de ce programme */ } on a deja remplacer f(strcmp(destination_path,current_long_path)>0 || strcmp(destination_path,current_long_path)<0) { /* verifie que c'est bien le bon exe qui est en cours d'execution */ par f(strcmp(destination_path,current_long_path) != 0) { /* verifie que c'est bien le bon exe qui est en cours d'execution */ donc si l'exe en cour d'execution est le meme que l'exe demander apres plusieurs test et quelques frayeurs pour les majuscules ^^ il s'avere que le test renvoie 0 donc que les deux valeur soient les memes donc on rentre pas dans le test donc fin de programme donc fermutre de flot (oublier dans le code mais mis a ma demande) le probleme c'est que ca tourne toujours en boucle et la je vois pas pourquoi -> execution on execute le fichier il recupere l'emplacement du fichier on ouvre le flux de lecture -> oui on trouve le fichier demander on test : en effet ce sont les memes fichiers fin je vois pas pourquoi ca tourne en boucle suite demain matin avec une tete un peu plus reposée Link to comment Share on other sites More sharing options...
X-Kalibur Posted August 15, 2005 Author Share Posted August 15, 2005 Bon ne pouvant pas dormir (chaleur) je me suis remis dessus et me suis rendu compte de l'erreur, enfin je pense. Lors de la première exécution du "mauvais" exe, il s'auto-copiait bien ou il fallait, fermait le "mauvais" exe pour lancer le "bon" exe. Mais si on lançait le "mauvais" exe alors que le "bon" était déjà à la bonne place alors il vérifiais bien si le chemin du mauvais et vu qu'il trouvais que ce n'était pas le même chemin ce fermait et lançais le bon et c'est qu'est le problème car quand le "bon" ce lançait il essayait lui aussi toute cette vérification ; et au tout début lorsqu'il testait l'ouverture du fichier je pense que ça échouait car probablement qu'un exe ne peut pas s'auto-ouvrir, donc ne pouvant s'ouvrir il lançait ça comme commande : ShellExecute(hwnd, NULL, destination_path, NULL, NULL, SW_NORMAL); /* exec du programme */ return 0; /* fermeture de ce programme */ Voila pourquoi il s'executait et se fermais en boucle... Donc j'ai finalement tout remplacer par simplement : /* Verification du bon fichier */ char copy[500]; char current_long_path[500]; char current_short_path[500]; char destination_path[] = "c:\\mon_fichier.exe"; GetModuleFileName(NULL, current_long_path, 500); /* le chemin complet */ GetShortPathName(current_long_path, current_short_path, 500); /* transforme le chemin complet en version short (98) */ if(strcmp(destination_path,current_long_path) !=0) { /* creation de la command copy */ strcpy(copy, "copy "); strcat(copy, current_short_path); strcat(copy, " "); strcat(copy, destination_path); /* fin creation copy */ system(copy); system("cls"); ShellExecute(hDlg, NULL, destination_path, NULL, NULL, SW_NORMAL); /* exec du programme */ return 0; /* fermeture de ce programme */ } Comme ça tout simplement si les chemins sont différents il se copie, exécute l'autre et ce ferme. Link to comment Share on other sites More sharing options...
keneda212 Posted August 15, 2005 Share Posted August 15, 2005 oui c'est vrai. je me demande pourquoi tu n'a pas fait comme ca depuis le debut.. enfin bref Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.