当前位置: 首页 > article >正文

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

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.kler.cn/news/324647.html

相关文章:

  • 【运动控制】关于GPIO通用输入口的锁存功能
  • RTX 5090、5080规格完整曝光,来看来看
  • 一起搭WPF界面之界面切换绑定
  • 深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)
  • 基于SSM茶叶科普管理系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • PREDATOR: Registration of 3D Point Clouds with Low Overlap
  • DeepSS2GO——基于 CNN 的模型可以根据化学键预测蛋白质的功能
  • JPA + Thymeleaf 增删改查
  • 【Element-UI】实现el-drawer抽屉的左右拖拽宽度
  • ​美​团​一​面​-​2​
  • 《中国电子报》报道: 安宝特AR为产线作业者的“秘密武器
  • 一种用于常开型智能视觉感算系统的极速高精度模拟减法器
  • c++模拟真人鼠标轨迹算法
  • css实现自定义静态进度条-vue2
  • 【Elasticsearch】-dense_vector与hnsw的含义
  • idea 创建多模块项目
  • 探索基因奥秘:汇智生物如何利用组蛋白甲基化修饰测序技术革新农业植物基因组研究?
  • Hadoop三大组件之MapReduce(二)
  • matlab-对比两张图片的RGB分量的差值并形成直方图
  • 二次记录服务器被(logrotate)木马入侵事件
  • Redis实践之高级用法:管道、消息队列、事务、分布式锁
  • docker搭建clickhouse并初始化用户名密码
  • 【NLP】基于“检测器-纠错器”中文文本纠错框架
  • 大语言模型(LLM)效率优化技术全面综述:模型优化、数据优化、框架优化
  • 【unity进阶知识1】最详细的单例模式的设计和应用,继承和不继承MonoBehaviour的单例模式,及泛型单例基类的编写
  • 远程服务器安装anaconda并创建虚拟环境
  • 技术周总结09.23~09.29周日(分布式)
  • VCL界面组件DevExpress VCL v24.1.6全新发布
  • 【CSS/HTML】左侧固定,右侧自适应的布局方式理解margin负值理论
  • 反射及其应用---->2