Maison  >  Article  >  développement back-end  >  Comment lancer et gérer des exécutables Windows avec ::CreateProcess en C ?

Comment lancer et gérer des exécutables Windows avec ::CreateProcess en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 13:02:29276parcourir

How to Launch and Manage Windows Executables with ::CreateProcess in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn