«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как безопасно запускать исполняемые файлы на C++: почему CreateProcess() — ваш лучший выбор?

Как безопасно запускать исполняемые файлы на C++: почему CreateProcess() — ваш лучший выбор?

Опубликовано 9 ноября 2024 г.
Просматривать:447

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

Использование CreateProcess() для запуска исполняемых файлов

В этом руководстве мы рассмотрим, как открыть исполняемый файл (.exe) из другого исполняемого файла C.

Подводные камни использования system()

Прежде чем углубляться в решение, очень важно подчеркнуть опасности использования функции system(). System() имеет несколько недостатков:

  • Это ресурсоёмкое решение, потенциально замедляющее работу вашей программы.
  • Это подрывает безопасность, поскольку вы не можете контролировать выполняемые команды. Это может привести к непреднамеренному запуску вредоносных программ с правами администратора.
  • Антивирусное программное обеспечение часто помечает это как угрозу безопасности.

Использование CreateProcess()

Вместо system(), мы рекомендуем использовать функцию CreateProcess(). Эта функция позволяет запустить исполняемый файл, создав независимый процесс.

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

Устранение ошибки

Возникшая ошибка, скорее всего, связана с тем, что вы не указали полный путь к исполняемому файлу. Убедитесь, что вы указали полный путь, включая имя файла.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3