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

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

Linda Hamilton
Linda Hamilton原创
2024-10-29 18:35:031069浏览

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

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

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

使用 system() 的陷阱

在深入研究解决方案之前,强调使用 system() 函数的危险至关重要。 System() 有几个缺点:

  • 它是 ресурсоёмким,可能会减慢你的程序。
  • 它会破坏安全性,因为你无法控制执行的命令。这可能会导致无意中以管理员权限运行恶意程序。
  • 它经常被防病毒软件标记为安全威胁。

使用 CreateProcess()

而不是system() 中,我们建议使用 CreateProcess() 函数。此函数允许您启动可执行文件,创建一个独立的进程。

#include <windows.h>

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

  ZeroMemory( &amp;si, sizeof(si) );
  si.cb = sizeof(si);
  ZeroMemory( &amp;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 
                 &amp;si,            // STARTUPINFO structure
                 &amp;pi             // PROCESS_INFORMATION structure
                 );

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

解决错误

您遇到的错误可能是由于您没有指定完整的进程可执行文件的路径。确保提供完整路径,包括文件名。

以上是如何在 C 中安全地启动可执行文件:为什么 CreateProcess() 是您的最佳选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn