”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 C++ 中安全地启动可执行文件:为什么 CreateProcess() 是您的最佳选择?

如何在 C++ 中安全地启动可执行文件:为什么 CreateProcess() 是您的最佳选择?

发布于2024-11-09
浏览:910

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

利用 CreateProcess() 启动可执行文件

在本指南中,我们将探讨如何从另一个 C 可执行文件中打开可执行文件 (.exe)。

使用 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