Maison > développement back-end > C++ > 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
Libérer: 2024-11-02 13:02:29
original
358 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal