Ouvrir un .exe en C
Résolu/Fermé
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
-
6 mars 2009 à 19:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 mars 2009 à 19:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 mars 2009 à 19:01
A voir également:
- Ouvrir un .exe en C
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir un fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
- .Exe - Télécharger - Divers Utilitaires
- Ouvrir un fichier .dat - Guide
10 réponses
Wardog
Messages postés
389
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
17 octobre 2009
159
8 mars 2009 à 18:33
8 mars 2009 à 18:33
Oui
On mets des \ pour inhiber les caractères \
Si execl n'arrive pas à ouvrir le .exe il retourne -1.
#include <unistd.h> #include <stdio.h> int main() { if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1) { puts("L'execution du .exe a foire..."); return (1); } return (0); }
On mets des \ pour inhiber les caractères \
Si execl n'arrive pas à ouvrir le .exe il retourne -1.
Wardog
Messages postés
389
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
17 octobre 2009
159
6 mars 2009 à 20:08
6 mars 2009 à 20:08
Salut Wanted59
Il faut que tu fork (si tu programmes sous UNIX) et ensuite tu appelle ton binaire avec execve() et compagnie.
En gros, fork va dupliquer ton programme.
Tu aura alors 2 processus (un va quitter ton programme principal et exécuter l'autre binaire, un qui continuera dans ton programme).
int pid;
pid = fork();
if (pid == 0)
{
//processus fils qui va être tuer lors de l'appel du binaire avec execve()
//je lance l'execution du binaire avec execve() Ceci a pour effet de quitter ce programme là
execve("Monbinaire", *tableaudarguments[], *tableaudenvironnments[]);
exit(0);
}
else if (pid > 0)
{
//processus père
//je continue mon prog principal
}
Sous Windows, fork() n'existe pas mais va voir ici: http://www.infos-du-net.com/forum/124531-21-fork-windows et https://www.developpez.net/forums/d332/c-cpp/c/bibliotheques-systemes-outils/posix/fork-sous-windows/
Pour les prototypes etc je te laisse regarder sur Google ;)
Il faut que tu fork (si tu programmes sous UNIX) et ensuite tu appelle ton binaire avec execve() et compagnie.
En gros, fork va dupliquer ton programme.
Tu aura alors 2 processus (un va quitter ton programme principal et exécuter l'autre binaire, un qui continuera dans ton programme).
int pid;
pid = fork();
if (pid == 0)
{
//processus fils qui va être tuer lors de l'appel du binaire avec execve()
//je lance l'execution du binaire avec execve() Ceci a pour effet de quitter ce programme là
execve("Monbinaire", *tableaudarguments[], *tableaudenvironnments[]);
exit(0);
}
else if (pid > 0)
{
//processus père
//je continue mon prog principal
}
Sous Windows, fork() n'existe pas mais va voir ici: http://www.infos-du-net.com/forum/124531-21-fork-windows et https://www.developpez.net/forums/d332/c-cpp/c/bibliotheques-systemes-outils/posix/fork-sous-windows/
Pour les prototypes etc je te laisse regarder sur Google ;)
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
7
7 mars 2009 à 15:07
7 mars 2009 à 15:07
Merci pour ton aide Wardog mais en fait je suis sous windows et je comprend pas très bien ce que tu as écrit et je ne comprend pas non plus les liens :s, tu pourrais pas me donner un exemple pour par exemple je voudrai ouvrir un .exe qui se trouve dans C:\Documents and Settings\Wanted59\Bureau\Programmes\Pendu. Tu pourrais faire un exemple pour lui stp ? Car j'ai du mal a comprendre sans exemple là dsl. Merci quand même d'avoir repondu.
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
7
9 mars 2009 à 17:51
9 mars 2009 à 17:51
Bonjour Wardog, merci beaucoup de t'occupé de mon problème, Je commence bien a comprendre là mais le truc là c'est que ton code vérifie juste si on peut ouvrir l'exe là non? et au faite quand je test ton code mon programme s'ouvre et se ferme à la vitesse de la lumière donc j'essai d'utiliser system("PAUSE"); mais mon programme continu a s'ouvrir et à se fermer a la vitesse de la lumière mais sinon c'est juste que dans :
int main()
{
if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1)
{
puts("L'execution du .exe a foire...");
return (1);
}
return (0);
}
Je voit pas où j'ouvre mon programme pendu car là il vérifie juste si ça marche pour moi, 'fin je suis dsl de faire le boulet mais là je sens que j'approche de la vérité ^^. Merci en tout cas.
int main()
{
if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1)
{
puts("L'execution du .exe a foire...");
return (1);
}
return (0);
}
Je voit pas où j'ouvre mon programme pendu car là il vérifie juste si ça marche pour moi, 'fin je suis dsl de faire le boulet mais là je sens que j'approche de la vérité ^^. Merci en tout cas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
9 mars 2009 à 17:59
9 mars 2009 à 17:59
Salut,
Attention, avec la famille exec (si elle n'échoue pas), l'image du processus sera remplacée par celle indiquée en arguments. Donc si tu mets un system("PAUSE"); à la suite ça n'y changera rien. Par contre, tu peux mettre le sytem("PAUSE"); dans ton programme pendu est le recompiler. J'espère pour toi que tu peux y retoucher, sinon la suite va se compliquer vraiment ^^.
Par contre, laisse quand même le system("PAUSE") dans le fichier en cours, ne serait-ce que pour voir si l'exécution a bien eu lieu ou pas. Si ça se ferme aussitôt, c'est que execl a bien fonctionné.
Cdlt
Attention, avec la famille exec (si elle n'échoue pas), l'image du processus sera remplacée par celle indiquée en arguments. Donc si tu mets un system("PAUSE"); à la suite ça n'y changera rien. Par contre, tu peux mettre le sytem("PAUSE"); dans ton programme pendu est le recompiler. J'espère pour toi que tu peux y retoucher, sinon la suite va se compliquer vraiment ^^.
Par contre, laisse quand même le system("PAUSE") dans le fichier en cours, ne serait-ce que pour voir si l'exécution a bien eu lieu ou pas. Si ça se ferme aussitôt, c'est que execl a bien fonctionné.
Cdlt
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
7
9 mars 2009 à 20:58
9 mars 2009 à 20:58
Oui mais avec le code :
int main()
{
if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1)
{
puts("L'execution du .exe a foire...");
return (1);
}
return (0);
}
C'est où que j'ouvre mon autre .exe?
int main()
{
if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1)
{
puts("L'execution du .exe a foire...");
return (1);
}
return (0);
}
C'est où que j'ouvre mon autre .exe?
Wardog
Messages postés
389
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
17 octobre 2009
159
9 mars 2009 à 21:07
9 mars 2009 à 21:07
Au niveau du execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)
execl() exécute ton programme Pendu.
Si sa marche, le programme sera remplacé par ton pendu.
Fais gaffe au nom de ton pendu. Est-ce Pendu ou Pendu.exe ou pendu.exe?
Essaye sa:
Si tu as le message "L'execution du .exe a foire...", c'est que le programme n'arrive pas à exécuter ton .exe, vérifie alors le chemin.
execl() exécute ton programme Pendu.
Si sa marche, le programme sera remplacé par ton pendu.
Fais gaffe au nom de ton pendu. Est-ce Pendu ou Pendu.exe ou pendu.exe?
Essaye sa:
#include <unistd.h> #include <stdio.h> int main() { if ((execl("C:\\Documents and Settings\\Wanted59\\Bureau\\Programmes\\Pendu", 0)) == -1) { puts("L'execution du .exe a foire..."); while(1); return (1); } return (0); }
Si tu as le message "L'execution du .exe a foire...", c'est que le programme n'arrive pas à exécuter ton .exe, vérifie alors le chemin.
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
7
9 mars 2009 à 21:42
9 mars 2009 à 21:42
Merci beaucoup ça marche !
Juste pour savoir, il n'y a pas moyen d'ouvrir le Pendu sans fermer le programme qui l'ouvre?
Juste pour savoir, il n'y a pas moyen d'ouvrir le Pendu sans fermer le programme qui l'ouvre?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
9 mars 2009 à 23:41
9 mars 2009 à 23:41
Le programme qui l'ouvre comme tu dis n'existe plus lors qu'il ouvre le pendu. Son image de processus est remplacé par celui du pendu.
Wanted59
Messages postés
44
Date d'inscription
vendredi 6 mars 2009
Statut
Membre
Dernière intervention
15 octobre 2009
7
10 mars 2009 à 17:52
10 mars 2009 à 17:52
A ok ok j'ai compris, ba merci beaucoup en tout cas grace a vous j'ai un peu progresser en C, par contre j'ai un dernier petit service si vous le voulez bien, juste est-ce que vous pourriez m'expliquer en détail ce qui se passe lorsque j'utilise ce code, car là j'arrive a l'utiliser mais j'aimerai en savoir + sur ce code, merci d'avance et encore merci pour l'aide précédente.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
10 mars 2009 à 19:01
10 mars 2009 à 19:01
Salut,
Voici un petit lien qui explique ce que fait execl: http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/execl.3.html
Voici un petit lien qui explique ce que fait execl: http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/execl.3.html