begin process at 2008 08 20 17:13:27
1 228 954 membres
315 nouveaux aujourd'hui
14 259 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Verifier que le programme executé est au bon endrois [ Archives / Fichier / Disque ] (XKaliBur)

Verifier que le programme executé est au bon endrois le 14/08/2005 18:24:23

XKaliBur
Membre Club
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.

Re : Verifier que le programme executé est au bon endrois le 14/08/2005 18:36:20

BruNews
(Admin CS)
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++

Re : Verifier que le programme executé est au bon endrois le 14/08/2005 18:57:05

XKaliBur
Membre Club
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 ?



Re : Verifier que le programme executé est au bon endrois le 14/08/2005 19:27:27

Kaid
En C on compare pas des chaines de caractères avec les opérateurs == et != mais avec strcmp().

Kaid - kaid.fr.st

Re : Verifier que le programme executé est au bon endrois le 14/08/2005 19:35:35

BruNews
(Admin CS)
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++

Re : Verifier que le programme executé est au bon endrois le 15/08/2005 03:31:40

magic_Nono
Membre Club
   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


Classé sous : fichier, programme, path, current, copy

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
campagne Adwords
Budget : 5 000€
Boite echanges securis...
Budget : 500€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS