C++启动其它进程的方式

news2024/9/29 3:34:58

C++启动其它进程的方式

  • 说明
  • 方式一:使用 system() 函数
  • 方式二:使用 ShellExecute() 函数
  • 方式三:使用 CreateProcess() 函数

说明

  • system、ShellExecuteEx和CreateProcess都是用于在Windows操作系统上执行外部程序的函数
  • system是C标准库函数,可以执行简单的命令行命令,但其缺点是无法获得外部程序的详细信息和返回值
  • ShellExecuteEx函数可以执行任意类型的文件,并且可以指定外部程序的工作目录和参数。但需要依赖Windows Shell,有时会因为文件关联或路径问题而无法执行
  • CreateProcess函数是Windows API提供的一个创建新进程的函数。可以创建进程并指定进程的可执行文件路径、工作目录、命令行参数、环境变量等信息。相对于其他两个函数来说更加灵活,可以控制进程的各种属性,而且不依赖Windows Shell,因此在某些情况下更加可靠
  • 推荐使用CreateProcess函数,因为更加灵活、可靠,并且可以获得进程的详细信息和返回值

方式一:使用 system() 函数

#include <stdlib.h>
int main() 
{
   system("notepad.exe"); 
   return 0;
}
  • system函数是标准库函数,允许在Windows平台上启动任何可执行文件
  • 需要注意它可以启动任何可执行文件,包括恶意软件

方式二:使用 ShellExecute() 函数

#include <windows.h>
#include <shellapi.h>
int main()
 {
    SHELLEXECUTEINFO sei = { 0 };
    sei.cbSize = sizeof(sei);
    sei.lpVerb = L"open";
    sei.lpFile = L"notepad.exe";
    sei.nShow = SW_SHOWDEFAULT;
    ShellExecuteEx(&sei);
    return 0;
}
  • ShellExecute可以启动指定的应用程序,并且支持检查安全性问题
  • ShellExecute 和 ShellExecuteEx 函数都是Windows API中的函数,主要用于启动外部程序,打开文件,链接,甚至可以用来打开网页等
  • ShellExecute 在调用程序中启动指定文件的函数,会调用与文件关联的默认程序,并且不会等待程序执行完成
  • ShellExecuteEx 是更加强大的版本,可以等待程序执行完成,且提供了更多的参数和选项。可以用于打开一个外部程序、打开一个文档文件或网址、打印文档、以及执行其他Windows Shell中的操作
  • 推荐使用 ShellExecuteEx 函数,因为它提供了更多的参数和选项,并且可以控制程序的执行状态,同时还可以提供错误信息和进程信息。在一些需要控制程序执行状态或者需要处理进程信息的场合,ShellExecuteEx 函数会更加方便和可靠

方式三:使用 CreateProcess() 函数

C++创建子进程

        PROCESS_INFORMATION m_Process;
        SecureZeroMemory(&m_Process, sizeof(m_Process));
        STARTUPINFO si;
        SecureZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        BOOL bSuccess = CreateProcess(strExePath.c_str(),
                                      szParams,
                                      NULL,
                                      NULL,
                                      FALSE,
                                      (nGCUDebugEn > 0) ? NORMAL_PRIORITY_CLASS : CREATE_NO_WINDOW,
                                      NULL,
                                      NULL,
                                      &si,
                                      &m_Process);       

        //if(nullptr != m_Process.hProcess)
       // {
              //  CloseHandle(m_Process.hProcess);
        //}
       // if(nullptr != m_Process.hThread)
       // {
              //  CloseHandle(m_Process.hThread);
      //  }
  • CreateProcess函数是Windows API中用于启动其他程序的函数
  • CreateProcess函数可以用于启动任何可执行文件,包括自己编写的可执行程序。与ShellExecuteEx不同,CreateProcess可以与新进程进行交互,例如向其传递命令行参数或者读取其输出
  • ShellExecuteEx比CreateProcess更通用,因为它可以打开任何已经注册的文件类型,并且它还可以自动检测文件类型并使用适当的程序来打开它。而CreateProcess函数则更加专业化,它只能用于启动可执行文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重学 MySQL】四十一、子查询举例与分类

【重学 MySQL】四十一、子查询举例与分类 引入子查询在SELECT子句中引入子查询在FROM子句中引入子查询在WHERE子句中引入子查询注意事项 子查询分类标量子查询列子查询行子查询表子查询 子查询注意事项子查询的位置子查询的返回类型别名的使用性能考虑相关性错误处理逻辑清晰 总…

Vue 学习

vue 核心语法 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Vue 核心语法测试</title> </head><body&…

GGHead:基于3D高斯的快速可泛化3D数字人生成技术

随着虚拟现实(VR)、增强现实(AR)和数字人技术的发展,对高质量、实时生成的3D头部模型的需求日益增长。传统的3D生成方法往往依赖于复杂的2D超分辨率网络或大量的3D数据,这不仅增加了计算成本,还限制了生成速度和灵活性。为了解决这些问题,研究人员开发了一种名为GGHead…

14.安卓逆向-frida基础-编写hook脚本2

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

图技术与大语言模型 LLM 结合,打造下一代知识图谱应用

随着 AI 人工智能技术的迅猛发展和自然语言处理领域的研究日益深入&#xff0c;如何构建强大的大语言模型对于企业来说愈发重要&#xff0c;而图数据库作为处理复杂数据结构的有力工具&#xff0c;为企业构建行业大语言模型提供了强大的支持。 近日&#xff0c;国产企业级分布…

UE学习篇ContentExample解读------Blueprints Advanced-下

文章目录 总览描述批次阅览2.1 Timeline animation2.2 Actor tracking2.3 Button Trigger using a blueprint interface2.4 Opening door with trigger2.5 Child Blueprints 概念总结致谢&#xff1a; 总览描述 打开关卡后&#xff0c;引入眼帘的就是针对关卡的总体性文字描述&…

netdata(Linux 性能实时监测工具)一键安装 for armbian

下载地址netdata/netdata: Architected for speed. Automated for easy. Monitoring and troubleshooting, transformed! (github.com) sh netdata-armv7l-latest.gz.run^|.-. .-. .-. .-. . netdata| - - - - real-time performance monitoring, done righ…

指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名

常见场景 用户有大量图片/PDF文件&#xff0c;期望能按照图片/PDF中的某些文字对图片/PDF文件重命名。期望工具可以批量处理、离线识别&#xff08;保证数据安全性&#xff09;。手工操作麻烦。具体场景&#xff1a;用户有工程现场照片&#xff0c;订单&#xff0c;简历等PDF或…

动手学深度学习-GPU常见报错-CUDA11.4-AssertionError: Torch not compiled with CUDA enabled

目录 本文还能解决&#xff1a; 0. 问题原因 1. 查看机器的cuda版本 2. 从官网下载对应的torch和torchvision 3. 具体安装方法 本文还能解决&#xff1a; torch.cuda.is_available() 输出为 False&#xff1b; torch.cuda.device_count() 输出为 0 0. 问题原因 这两个问题…

召回09 双塔模型+自监督学习

引入&#xff1a; 自监督学习改进双塔模型&#xff0c;可以提升业务指标。自监督学习是把物品塔学习得更习的更好。 长尾物品的曝光和点击数量太少&#xff0c;训练的样本次数不够。自监督可以更好地学习长尾数据的物品表征。 双塔模型的训练&#xff1a; 线上召回的时候不用纠…

SSM+Vue社区物业管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…

SpringCloud简介 Ribbon Eureka 远程调用RestTemplate类 openfeign

〇、SpringCloud 0.区别于单体项目和soa架构&#xff0c;微服务架构每个服务独立&#xff0c;灵活。 1. spring cloud是一个完整的微服务框架&#xff0c;springCloud包括三个体系&#xff1a; spring cloud Netflix spring cloud Alibaba spring 其他 2.spring cloud 版本命名…

【每日刷题】Day133

【每日刷题】Day133 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 085. 括号生成 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 102. 目标和 - 力扣&#xff…

Spring的热部署工具和数据库密码加盐操作

1.布置热部署 引言&#xff1a;在程序运行起来后&#xff0c;如果我们对代码进行了修改&#xff0c;需要重新测试修改后的程序&#xff0c;就得重新启动程序&#xff0c;这样很麻烦。于是引入热部署之后&#xff0c;我们就不需要重新启动程序&#xff0c;会自动更正。 1.配置po…

多线程;顺序容器;智能指针

多线程的创建创建线程比较简单&#xff0c;C提供头文件thread&#xff0c;使用std的thread实例化一个线程对象创建。 std::thread 在 #include 头文件中声明&#xff0c;因此使用 std::thread 时需要包含 #include 头文件。 #include <iostream> #include <thread&g…

【C++】C++的Vector使用和实现

目录 vector的介绍 vector的使用 construct iterator capacity Element access mondifiers vector的原理介绍以及简单实现 vector的介绍 我们平时在写代码中可能会使用各种类型的array&#xff0c;也就是数组&#xff0c;但是这些数组都是静态的&#xff0c;意味着我们只能…

A股突破3000,连续大涨,公司国庆假放10天

关注▲洋洋科创星球▲一起成长&#xff01; 庆祝A股突破3000&#xff0c;连续大涨&#xff0c;也不知道老板抽了什么风&#xff0c;公司今天开始放国庆假了&#xff0c;连休10天&#xff0c;哈哈哈哈哈哈。 27号开始放国庆假&#xff0c;连休10&#xff0c;刺激。 中秋国庆这一…

在线代码编辑器

在线代码编辑器 文章说明前台核心代码后台核心代码效果展示源码下载 文章说明 采用Java结合vue3设计实现的在线代码编辑功能&#xff0c;支持在线编辑代码、运行代码&#xff0c;同时支持导入文件&#xff0c;支持图片识别&#xff0c;支持复制代码&#xff0c;可将代码导出为图…

网络安全带你练爬虫----添加异常处理代码

&#xff08;当代码越来越长的时候&#xff0c;异常处理代码有时候能起到很好的作用&#xff09; (注&#xff1a;其中的cookie需要填自己的) 一、异常处理代码&#xff1a; &#xff08;1&#xff09;try-except搭配&#xff1a;try关键字后面的代码是要监视异常的代码块&am…

DarkLabel 2.4 目标追标注工具介绍

DarkLabel介绍 https://github.com/darkpgmr/DarkLabel 官方地址 视频/图像标注工具&#xff0c;很适合用于目标追踪任务 DarkLabel可以在视频和图像中标注物体的边界框&#xff0c;并附上 ID 和name。还可以用于裁剪视频、从视频中采样训练图像以及对图像区域进行马赛克处理…