C, fonction pour lancer un exe ?
Résolu
lego
-
ghuysmans99 Messages postés 2496 Date d'inscription Statut Contributeur Dernière intervention -
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 =)
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:
- C, fonction pour lancer un exe ?
- Fonction si et - Guide
- .Exe - Télécharger - Divers Utilitaires
- Svchost exe - Guide
- Créer un fichier bat pour lancer un exe - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
7 réponses
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.
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,
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,
.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,
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,
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++ ?
ps: ça marche aussi pour le C ou seuement pour le c++ ?
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
myprogramm êst renommé en le nom du fichier que tu veux ouvrir, dans le même dossier.
Configuration: Windows 1 / Internet Explorer 3.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é ?
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é ?
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().
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().
.exe c'est windows. ;-))).