"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment lancer des fichiers exécutables en toute sécurité en C++ : pourquoi CreateProcess() est votre meilleur choix ?

Comment lancer des fichiers exécutables en toute sécurité en C++ : pourquoi CreateProcess() est votre meilleur choix ?

Publié le 2024-11-09
Parcourir:260

How to Launch Executable Files Securely in C  : Why CreateProcess() Is Your Best Choice?

Utiliser CreateProcess() pour lancer des fichiers exécutables

Dans ce guide, nous explorerons comment ouvrir un fichier exécutable (.exe) à partir d'un autre exécutable C.

Les pièges de l'utilisation de system()

Avant d'approfondir la solution, il est crucial de souligner les dangers liés à l'utilisation de system() fonction. System() présente plusieurs inconvénients :

  • Cela génère des ressources, ce qui ralentit potentiellement votre programme.
  • Cela compromet la sécurité, car vous n'avez aucun contrôle sur les commandes exécutées. Cela peut conduire à l'exécution involontaire de programmes malveillants avec des privilèges d'administrateur.
  • Cela est souvent signalé comme une menace de sécurité par les logiciels antivirus.

Utilisation de CreateProcess()

Au lieu de system(), nous vous recommandons d'utiliser la fonction CreateProcess(). Cette fonction vous permet de lancer un fichier exécutable, créant un processus indépendant.

#include 

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

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

  CreateProcess( lpApplicationName,   // executable path
                 argv[1],        // command line
                 NULL,           // process handle not inheritable
                 NULL,           // thread handle not inheritable
                 FALSE,          // no handle inheritance
                 0,              // no creation flags
                 NULL,           // parent's environment block
                 NULL,           // parent's starting directory 
                 &si,            // STARTUPINFO structure
                 &pi             // PROCESS_INFORMATION structure
                 );

  // Close process and thread handles. 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
}

Résolution de l'erreur

L'erreur que vous avez rencontrée provient probablement du fait que vous n'avez pas spécifié le chemin complet du fichier exécutable. Assurez-vous de fournir le chemin complet, y compris le nom du fichier.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3