Appel de ::CreateProcess pour lancer et gérer les exécutables Windows en C
Cet article montrera comment utiliser la fonction ::CreateProcess en C pour lancer les exécutables Windows, attendre leur achèvement et gérer correctement leur terminaison.
Lancement d'un exécutable
La fonction ::CreateProcess accepte plusieurs paramètres, dont le chemin de l'exécutable et les arguments de ligne de commande. Pour lancer un EXE, précisez le chemin de l'exécutable dans le paramètre path :
<code class="cpp">STARTUPINFO info = { sizeof(info) }; PROCESS_INFORMATION processInfo; if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) { // Executable successfully launched } else { // Handle launch failure }</code>
En attente de fin
Pour attendre la fin de l'exécutable, appelez le Fonction WaitForSingleObject avec processInfo.hProcess comme handle à attendre :
<code class="cpp">WaitForSingleObject(processInfo.hProcess, INFINITE);</code>
Cela bloquera le thread actuel jusqu'à la fin du processus.
Gestion de la fin du processus
Une fois l'exécutable terminé, fermez le processus et les handles de thread pour libérer correctement les ressources système :
<code class="cpp">CloseHandle(processInfo.hProcess); CloseHandle(processInfo.hThread);</code>
Exemple de code
Rassembler le tout, le code suivant montre comment lancer un EXE, attendre sa fin et gérer la fin du processus :
<code class="cpp">STARTUPINFO info = { sizeof(info) }; PROCESS_INFORMATION processInfo; if (CreateProcess("C:\path\to\my.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo)) { WaitForSingleObject(processInfo.hProcess, INFINITE); CloseHandle(processInfo.hProcess); CloseHandle(processInfo.hThread); }</code>
Ce code lancera l'EXE spécifié, attendra qu'il se termine, puis fermera correctement toutes les poignées, assurer un nettoyage approprié et une désallocation des ressources.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!