"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo iniciar archivos ejecutables de forma segura en C++: ¿Por qué CreateProcess() es su mejor opción?

Cómo iniciar archivos ejecutables de forma segura en C++: ¿Por qué CreateProcess() es su mejor opción?

Publicado el 2024-11-08
Navegar:825

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

Utilización de CreateProcess() para iniciar archivos ejecutables

En esta guía, exploraremos cómo abrir un archivo ejecutable (.exe) desde otro ejecutable de C.

Los peligros de usar el sistema()

Antes de profundizar en la solución, es crucial resaltar los peligros de emplear el sistema() función. System() presenta varios inconvenientes:

  • Es muy costoso y potencialmente ralentiza el programa.
  • Socava la seguridad, ya que no tienes control sobre los comandos ejecutados. Esto puede provocar la ejecución involuntaria de programas maliciosos con privilegios de administrador.
  • El software antivirus lo marca a menudo como una amenaza a la seguridad.

Emplear CreateProcess()

En lugar de system(), recomendamos utilizar la función CreateProcess(). Esta función le permite iniciar un archivo ejecutable, creando un proceso independiente.

#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 );
}

Resolviendo el error

El error que encontró probablemente se debe al hecho de que no especificó la ruta completa del archivo ejecutable. Asegúrese de proporcionar la ruta completa, incluido el nombre del archivo.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3