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

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

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

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

解决错误

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

最新教程 更多>
  • Go 中的概率提前过期
    Go 中的概率提前过期
    关于缓存踩踏 我经常遇到需要缓存这个或那个的情况。通常,这些值会被缓存一段时间。您可能熟悉这种模式。您尝试从缓存中获取一个值,如果成功,则将其返回给调用者并结束。如果该值不存在,您将获取它(很可能从数据库中)或计算它并将其放入缓存中。在大多数情况下,这非常有效。但是,如果您用于缓存...
    编程 发布于2024-11-09
  • 如何使 JavaScript 正则表达式匹配不区分大小写?
    如何使 JavaScript 正则表达式匹配不区分大小写?
    在 JavaScript 中执行不区分大小写的正则表达式匹配使用 URL 时,通常需要从查询字符串中提取数据。在 JavaScript 中,使用正则表达式执行此提取可能很简单,但确保不区分大小写可能具有挑战性。在这篇文章中,我们探讨了一个常见问题,即区分大小写的比较可能会导致不一致的结果。让我们考虑...
    编程 发布于2024-11-09
  • 在 PHP 中将 Data-URI 转换为文件时如何解决图像损坏问题?
    在 PHP 中将 Data-URI 转换为文件时如何解决图像损坏问题?
    PHP Data-URI 到文件:解决损坏的图像问题在从 Data-URI 转换为文件格式期间保持图像数据的完整性至关重要。使用 PHP 的 file_put_contents 函数保存来自 JavaScript canvas.toDataURL() 调用的数据时遇到的一个常见挑战是生成的图像损坏。...
    编程 发布于2024-11-09
  • 数据库中哪种分层数据结构最好:邻接表还是替代方案?
    数据库中哪种分层数据结构最好:邻接表还是替代方案?
    数据库中的分层数据结构:邻接表与其他方法在关系数据库中实现分层数据时,开发人员通常会考虑两种方法:邻接表和嵌套树。虽然邻接列表看起来更简单,但由于可能存在大量查询,因此对其遍历操作的性能产生了担忧。邻接列表和嵌套树的替代品除了这两个选项,存在表示数据库中分层数据的其他方法,包括:嵌套集合路径枚举闭包...
    编程 发布于2024-11-09
  • Cucumber.js:行为驱动测试的完整指南
    Cucumber.js:行为驱动测试的完整指南
    Cucumber.js 是一种流行的工具,用于运行以简单语言编写的自动化测试,允许开发人员和非开发人员协作进行测试。它在行为驱动开发 (BDD) 中特别有用,因为利益相关者之间的清晰沟通是关键。通过使用人类可读的语言,Cucumber js 使产品所有者、测试人员和开发人员能够确保软件按预期运行,...
    编程 发布于2024-11-09
  • 天国冒险:穿越空间和代码的旅程
    天国冒险:穿越空间和代码的旅程
    灵感 我一直对宇宙的浩瀚和神秘着迷。行星的错综复杂的运动、天体的壮丽——这些元素一直激发着我的好奇心。当我遇到这个挑战时,我认为这是一个将我对太空的热情与创造力和技术结合起来的机会。我想建造一些能够捕捉宇宙敬畏的东西,并让每个人都能接触到它,无论他们身在何处或使用什么设备。这个项目成为我将灵感转化为...
    编程 发布于2024-11-09
  • 如何获取 Openpyxl 中单元格的原始值,即使它包含公式?
    如何获取 Openpyxl 中单元格的原始值,即使它包含公式?
    如何在 Openpyxl 中检索实际单元格值使用 openpyxl 访问 Excel 中的单元格值时,您可能会遇到显示的值与存储在 Openpyxl 中的实际值之间的差异单元格(如果单元格包含公式)。这是因为 openpyxl 通常解释公式并检索计算结果。要检索实际单元格值(包括公式),可以在加载工...
    编程 发布于2024-11-09
  • React 的基本核心概念
    React 的基本核心概念
    在快速发展的 Web 开发世界中,React 仍然是构建动态和高性能用户界面的基石。无论您是经验丰富的开发人员还是刚刚起步的开发人员,了解 React 的核心概念对于充分发挥其潜力至关重要。在本文中,我们将探讨 React 的基本原理,从它的库状态到 hooks 的强大功能,并为您提供增强 Reac...
    编程 发布于2024-11-09
  • 如何防止 Chrome 的自动填充更改您的字体?
    如何防止 Chrome 的自动填充更改您的字体?
    克服 Chrome 的自动填充字体更改挑战在 Windows 上遇到 Chrome 的自动填充功能时,您可能会遇到烦人的字体更改问题。将鼠标悬停在已保存的用户名上时,字体大小和样式会发生变化,从而破坏表单的对齐方式。虽然您可以对输入应用固定宽度来缓解此问题,但更有效的解决方案在于完全防止字体更改。要...
    编程 发布于2024-11-09
  • Em 和 Rem:有什么区别?
    Em 和 Rem:有什么区别?
    简介:rem和em都是CSS中的大小单位。 Rem 是 root 元素的字体大小。 Em 是本地上下文的字体大小。 em 单位 是从印刷版式世界借来的,它是一个允许设置元素的字体大小相对于其组件层次结构中最接近的声明字体大小的单位。 rem 单元 是 root em 的缩写,始终引用根元素(即 元...
    编程 发布于2024-11-09
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-09
  • 修复 D3.js GeoJSON 绘图问题:如何纠正缠绕顺序?
    修复 D3.js GeoJSON 绘图问题:如何纠正缠绕顺序?
    D3.js 错误绘制 GeoJSON:缠绕顺序问题当尝试使用 geoJSON 数据可视化俄罗斯地区时,程序员遇到了一个问题其中 D3.js 绘制单个黑色矩形而不是所需的地图轮廓。这种差异是由于 geoJSON 文件中坐标的缠绕顺序问题引起的。了解缠绕顺序GeoJSON 坐标可以按顺时针或逆时针顺序排...
    编程 发布于2024-11-09
  • 多重继承的问题
    多重继承的问题
    Java不支持类的多重继承,标准方法不规避此限制,因为类可以维护状态(使用实例变量),但接口不能。 默认方法提供了行为多重继承的有限形式,允许一个类通过默认方法从多个接口继承行为。 当一个类实现的两个接口具有相同的默认方法时,可能会发生冲突,例如两个接口 Alpha 和 Beta 都使用了 res...
    编程 发布于2024-11-09
  • 如何避免 getImageData() 中的“画布已被跨域数据污染”错误?
    如何避免 getImageData() 中的“画布已被跨域数据污染”错误?
    如何避免 getImageData() 中出现“画布已被跨源数据污染”错误使用 getImageData( 时) 方法从画布检索像素数据,您可能会遇到错误“画布已被跨源数据污染”。当您尝试访问受从其他域加载的数据影响的画布上的像素数据时,会出现此错误。要了解此错误的原因,请考虑大多数浏览器中实现的安...
    编程 发布于2024-11-09
  • ## Promise.all:Node.js 中是并行执行还是顺序执行?
    ## Promise.all:Node.js 中是并行执行还是顺序执行?
    Promise.all:Node.js 中并行执行还是顺序执行?问题: Promise.all(iterable) 是否顺序处理 Promise 或并行?答案: Promise.all 不执行 Promise;相反,它只是同时等待多个承诺。 Promise 的计算和结果由调用 Promise.all...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3