Verifier que le programme executé est au bon endrois

XKaliBur Messages postés 45 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 13 février 2007 - 14 août 2005 à 18:24
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 15 août 2005 à 03:31
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(destination_path != current_long_path) {
/* 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.

5 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 août 2005 à 18:36
Pour vérifier c'est:
if(0 > (long)GetFileAttributes(szfile)) ABSENT

et évite de mélanger toutes sortes de code, tu commences en API alors tu vas au bout ainsi, faut être cohérent dans le code comme ailleurs.

ciao...
BruNews, MVP VC++
0
XKaliBur Messages postés 45 Date d'inscription vendredi 20 février 2004 Statut Membre Dernière intervention 13 février 2007
14 août 2005 à 18:57
Ce que tu viens de me donner c'est bien pour verifier si le fichier
existe? si oui c'est pas vraiment ça mon problème, c'est plus ici :



else
{
/* fichier existant */


if(destination_path != current_long_path) {
/* 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 */
}
}








Même si la façon que j'utilise est beaucoup moins propre que
la tienne ça marche pour vérifier que le fichier existe ou non. Mon problème
c'est surtout lorsqu'il vérifie si le fichier exécuter est celui qui est dans
c:\monfichier.exe.



A moins que j'ai mal compris ton poste. Et puis dernière petite question pourquoi le mélange
cémal ?
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
14 août 2005 à 19:27
En C on compare pas des chaines de caractères avec les opérateurs == et != mais avec strcmp().

Kaid - kaid.fr.st
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 août 2005 à 19:35
Parce qu'on voit plus de "bons à rien" que de "bon à tout", je ne dis pas que c'est toi mais c'est une devise qui a fait ses preuves dans le temps.

destination_path != current_long_path
ça le sera à tout coup différent, ce sont 2 adresses !!! différentes, on est pas chez VB ici pour faire ce "!=".

strcmp() comme dit par Kaid pour comparer.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
15 août 2005 à 03:31
char current_long_path[500];
char current_short_path[500];
char destination_path[] = "c:\\mon_fichier.exe";

l'a tué, ça aurait été autre choses ça serait passé
(mais c'est au minimum du C++ ds ce cas)

sinon, pr continuer comme BN
y a des doués, bons à tout; des bons à rien
et même des
mauvais à tout.
[Pagnol - Fany:"Il n'est pas bon à rien, il est mauvais à tout..."]

___________________________________________________________
Magicalement
Nono
0
Rejoignez-nous