Jump to content

[RESOLU][C/C++]Verifier que le programme executé


Recommended Posts

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

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 :ouioui:

suite demain matin avec une tete un peu plus reposée :transpi:

Link to comment
Share on other sites

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

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...