VC程序设计中CreateProcess用法注意事项

标题:VC程序设计中CreateProcess用法注意事项

什么是CreateProcess

CreateProcess是一个Windows API函数,用来创建一个新的进程。它可以由一个程序来调用,来生成新的进程并运行。

CreateProcess的使用注意事项

在使用CreateProcess函数创建新进程的时候,需要注意以下几点:

参数lpCommandLine中注意引号的使用

lpCommandLine参数指定了将要执行的命令行字符串。尽管它看起来像是一个字符串数组,但实际上只是一个普通的字符串,里面包含了执行的程序名和命令参数。在传递参数的时候,如果你传递一个字符串数组,那么它会被解析为一个带空格的字符串。

如果你传递的字符串中有参数前后都需要加上双引号,那么你应该将字符串包含在一个双引号中,以防止双引号被解释为字符串的结束标志。

参数lpProcessInformation中需要赋初值

lpProcessInformation参数指向一个PROCESS_INFORMATION结构体,它用来保存新进程的标识符、句柄等信息。在使用CreateProcess函数之前,你应该先将这个结构体赋初值,否则可能会发生未定义的行为。使用memset函数或ZeroMemory函数来赋初值。

子进程需要等待

如果你想让父进程等待子进程结束的话,可以使用WaitForSingleObjectWaitForMultipleObjects函数等待。在子进程结束之前,父进程会一直被阻塞。

两个示例

下面是两个使用CreateProcess的示例。

示例一:运行一个可执行文件

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);

if (!CreateProcess(
       "app.exe",
       NULL,
       NULL,
       NULL,
       FALSE,
       0,
       NULL,
       NULL,
       &si,
       &pi
   ))
{
       printf("CreateProcess failed (%d).\n", GetLastError());
       return;
}

WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

这个示例中,CreateProcess函数调用app.exe应用程序,并等待它结束之后返回。注意,si参数需要正确地初始化。

示例二:运行命令行

PROCESS_INFORMATION pi;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);

char cmdline[MAX_PATH];
sprintf(cmdline, "cmd.exe /c echo \"Hello World!\"");

if (!CreateProcess(
       NULL,
       cmdline,
       NULL,
       NULL,
       FALSE,
       0,
       NULL,
       NULL,
       &si,
       &pi
   ))
{
       printf("CreateProcess failed (%d).\n", GetLastError());
       return;
}

WaitForSingleObject(pi.hProcess, INFINITE);

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

这个示例中,CreateProcess函数调用cmd.exe程序,并调用echo "Hello World!"命令。运行结束之后,程序返回。注意,参数cmdline中需要正确地包含双引号引起来的字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VC程序设计中CreateProcess用法注意事项 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • C语言实现简单班级成绩管理系统

    C语言实现简单班级成绩管理系统 本文将详细讲解如何使用C语言实现班级成绩管理系统,包括创建数据结构、实现各种功能以及存储数据等。下面将详细介绍具体的步骤。 步骤一:创建数据结构 首先,要创建一个数据结构来存储学生的信息。这个数据结构应该包含以下信息: 学生ID 学生姓名 数学成绩 语文成绩 英语成绩 平均分 例如,可以使用以下代码来创建这个数据结构: str…

    C 2023年5月23日
    00
  • 使用Jackson来实现Java对象与JSON的相互转换的教程

    使用Jackson来实现Java对象与JSON的相互转换需要遵循以下步骤: 添加Jackson依赖 首先需要在项目中添加Jackson依赖。如果你正在使用Maven,则可以在pom.xml文件中添加以下依赖关系: <dependency> <groupId>com.fasterxml.jackson.core</groupId&…

    C 2023年5月23日
    00
  • Java日常练习题,每天进步一点点(42)

    这里是对“Java日常练习题,每天进步一点点(42)”的完整攻略: 简介 这是一系列的Java练习题,旨在帮助Java初学者逐步熟悉Java语言,并锻炼编程思维和逻辑。本题库包含四十二道Java练习题,每道题目都配有具体的题目描述以及测试用例。 如何使用 下载题目文件:可以在本网站下载题目文件,下载后保存在本地。 阅读题目:使用任意文本编辑器打开题目文件,阅…

    C 2023年5月23日
    00
  • C++获取MD5算法实现代码

    获取MD5算法实现代码的完整攻略可以分为以下几步: 步骤一:了解MD5算法 MD5算法是一种哈希算法,它将任意长度的数据(字节序列)映射为固定长度(128位)的数据,通常表示为32位16进制数。在C++中,可以使用第三方库或自己编写代码来实现MD5算法。 步骤二:选择MD5库 有很多开源的MD5库可供选择,常用的有: OpenSSL:一个通用的加密库,包含各…

    C 2023年5月24日
    00
  • JSON基础介绍与详细用法

    JSON基础介绍与详细用法 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可以轻松地在不同语言和平台之间进行数据传输和交换。它的基本语法规则和JavaScript的语法规则类似,因此具有良好的可读性和可编写性。它采用键值对的形式进行数据存储,并支持嵌套、数组、对象等复杂数据结构。 在JSON中,…

    C 2023年5月23日
    00
  • 理光C3004SP打印机怎么安装驱动?

    安装驱动是使打印机正常工作的必要步骤,下面为您提供理光C3004SP打印机安装驱动的完整攻略: 步骤一:准备工作 首先需要从理光官网下载适合的驱动程序,可以在理光官网中找到C3004SP系列打印机对应的驱动程序。下载结束之后,需要解压缩驱动安装包。 步骤二:安装驱动程序 首先需要右键点击开始菜单,选择设备管理器。 在设备管理器中选择打印机,并右键选择添加打印…

    C 2023年5月23日
    00
  • 基于C语言实现学生成绩管理系统

    基于C语言实现学生成绩管理系统完整攻略 1. 掌握C语言基础 要实现学生成绩管理系统,首先需要掌握C语言的基础知识,包括控制流、函数、数组、结构体、指针等等。 2. 设计数据结构 根据学生成绩管理系统的需求,设计合适的数据结构来存储学生信息和成绩。可以使用结构体来存储学生信息,包括学号、姓名、性别、年龄等等;使用数组来存储学生成绩,每个元素代表一个学生的成绩…

    C 2023年5月23日
    00
  • C语言实现五子棋小游戏

    C语言实现五子棋小游戏攻略 1. 环境准备 在开始编写五子棋小游戏前,需要先确定所用的开发工具以及环境。 1.1 开发工具 可以使用任何一种 C 语言开发工具,如 Visual Studio、Code::Blocks、Dev-C++等。本攻略以 Code::Blocks 为例进行讲解。 1.2 环境配置 安装 Code::Blocks 后,需要进行一些环境配…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部