C, fonction pour lancer un exe ?

Résolu/Fermé
lego - 26 avril 2010 à 20:04
ghuysmans99 Messages postés 2496 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 =)




A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
26 avril 2010 à 23:12
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.
2
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
26 avril 2010 à 23:44
Ne sachant pas sous quelle plateforme il était j'ai préféré parler de system() plutôt que de ShellExecuteEx().
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 27/04/2010 à 07:57
lancer le programme monprog.exe
.exe c'est windows. ;-))).
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
26 avril 2010 à 20:12
system("tacommande");
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
26 avril 2010 à 20:48
Bonjour,

Il faut utiliser la fonction CreateProcess : https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa?redirectedfrom=MSDN
Cela créera un processus ou ShellExecuteEx()

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

Cdlt,
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
27 avril 2010 à 13:15
.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,
1

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

Posez votre question
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
l'adminsitration du monde
26 avril 2010 à 21:23
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
.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é ?
0
ghuysmans99 Messages postés 2496 Date d'inscription jeudi 14 juillet 2005 Statut Contributeur Dernière intervention 5 juin 2016 338
27 avril 2010 à 19:54
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().
0