C, fonction pour lancer un exe ?

Résolu
lego -  
ghuysmans99 Messages postés 2496 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   340
 
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   Statut Contributeur Dernière intervention   1 846
 
lancer le programme monprog.exe
.exe c'est windows. ;-))).
0
ghuysmans99 Messages postés 2496 Date d'inscription   Statut Contributeur Dernière intervention   340
 
system("tacommande");
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   1 846
 
.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
lego
 
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
 
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
lego
 
.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   Statut Contributeur Dernière intervention   340
 
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