Menu

C, fonction pour lancer un exe ? [Résolu/Fermé]

- - Dernière réponse : ghuysmans99
Messages postés
2520
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
- 27 avril 2010 à 19:54
Bonjour, je fais de la programmation C (niveau très amateur j'avoue :p )
Je voudrais savoir si il existe des fonctions (même si à mon avis la réponse est oui :) ) qui permettraient de dire "lancer le programme monprog.exe [par exemple]" ou "si le programme " monprog.exe est lancé, alors faire ..."

Ps: tout ce que je sais en C dans ce secteur-là, c'est écrire et lire du texte dans les fichiers.


merci d'avance =)




Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
11138
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
2213
2
Merci
system est une fonction standard de stdlib.h pour le C. Donc tu peux l'utiliser. Par contre, les fonctions ShellExecuteEx et CreateProcess font parties de l'API windows, donc utilisable en C en particulier.

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57927 internautes nous ont dit merci ce mois-ci

ghuysmans99
Messages postés
2520
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
384 -
Ne sachant pas sous quelle plateforme il était j'ai préféré parler de system() plutôt que de ShellExecuteEx().
fiddy
Messages postés
11138
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
2213 -
lancer le programme monprog.exe
.exe c'est windows. ;-))).
Messages postés
2520
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
384
1
Merci
system("tacommande");
Messages postés
11138
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
2213
1
Merci
Bonjour,

Il faut utiliser la fonction CreateProcess : http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
Cela créera un processus ou ShellExecuteEx()

En tout cas, à moins de faire un programme "à l'arrache", évite d'utiliser la fonction system().

Cdlt,
Messages postés
11138
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
2213
1
Merci
.exe c'est Windows ? Pour les autres c'est quoi alors ? :)
Cela dépend de l'OS. Par exemple sur GNU/Linux, Unix et Cie, il n'y a pas d'extension. Ce qui caractérise qu'un programme doit être ouvert par tel logiciel est le magic number renseigné dans le fichier. Sur Windows, ce qui détermine qu'un programme est un exécutable n'est pas son format PE mais son extension .exe . C'est d'ailleurs ainsi que sont nées plusieurs failles de sécurités.

Et aussi, est-ce qu'il existe une fonction qui permettrait de savoir si le programme monprog.exe est lancé ou non
Si tu as le nom du processus tu peux utiliser une API système : isProcessRunning()

Cdlt,
0
Merci
oki merci je vais regarder ça. (merci aussi pour ghysmans même si ta fonction est qualifiée de "à l'arrache par fiddy :p )

ps: ça marche aussi pour le C ou seuement pour le c++ ?
0
Merci
system("start myprogramm.exe");

myprogramm êst renommé en le nom du fichier que tu veux ouvrir, dans le même dossier.

Configuration: Windows 1 / Internet Explorer 3.0
0
Merci
.exe c'est Windows ?
Pour les autres c'est quoi alors ? :)

Et aussi, est-ce qu'il existe une fonction qui permettrait de savoir si le programme monprog.exe est lancé ou non. (par exemple: un code du genre
if (!monprog.exeEstLancé)
{
// là je tape un autre truc
}

à moins que la fonction ShellExecuteEx() bloque mon programme le temps de l'execution du programme qui a été lancé ?
ghuysmans99
Messages postés
2520
Date d'inscription
jeudi 14 juillet 2005
Statut
Contributeur
Dernière intervention
5 juin 2016
384 -
Oui, les .exe sont (à la base) des exécutables pour les OS Microsoft (MS-DOS et plus tard Windows). Pour Linux c'est un format elf (le fichier ne porte toutefois pas d'extension).

Si tu veux attendre la fin de l'exécution du prog que tu as lancé, le handle sur le processus se trouve dans la structure SHELLEXECUTEINFO passée en paramètre. Il te suffit d'utiliser WaitForSingleObject().