Maison  >  Article  >  développement back-end  >  Comment lancer des exécutables depuis C : une alternative plus sûre à `system()` ?

Comment lancer des exécutables depuis C : une alternative plus sûre à `system()` ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 01:21:02168parcourir

  How to Launch Executables from C  :  A Safer Alternative to `system()`?

Lancement d'exécutables depuis C : Une alternative au système()

En C, le lancement d'un exécutable à partir d'un autre exécutable peut être réalisé en utilisant le système (), mais cette méthode pose des problèmes de sécurité et d’efficacité du système. Une approche plus robuste consiste à utiliser la fonction CreateProcess().

<code class="cpp">#include <windows.h>

void startup(LPCTSTR lpApplicationName) {
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   ZeroMemory(&si, sizeof(si));
   si.cb = sizeof(si);
   ZeroMemory(&pi, sizeof(pi));

  CreateProcess(lpApplicationName, 
         argv[1], 
         NULL, 
         NULL, 
         FALSE, 
         0, 
         NULL, 
         NULL, 
         &si, 
         &pi
    );
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}</code>

Utilisation de CreateProcess() :

  1. Définissez la fonction startup() comme indiqué ci-dessus .
  2. Spécifiez le chemin d'accès à l'exécutable dans lpApplicationName.
  3. Appelez CreateProcess() pour lancer l'exécutable.
  4. Fermez le processus et les poignées de thread pour le nettoyage des ressources.

Dépannage des erreurs :

Assurez-vous que le chemin spécifié vers l'exécutable est correct. L'erreur rencontrée dans le code fourni est probablement due à un chemin d'accès non valide vers "OpenFile.exe".

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