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语言中,关键字是指被编程语言所保留的具有特殊含义的标识符。这些关键字不能被用作变量名或其他标识符的名称,因为它们在编译器中与特定的语法规则绑定。 C语言有32个关键字,其中31个是保留关键字,一个是特殊标识符(即: main())。让我们详细了解这些关键字。 1. auto auto 用于声明局部变量。如果在…

    C 2023年5月24日
    00
  • C语言实现推箱子代码

    C语言实现推箱子代码完整攻略 1. 简介 推箱子,又称”推石头游戏”,是一种经典的益智游戏。在游戏中,玩家需要推动箱子到目标位置,从而完成关卡任务。现在我们就来详细讲解如何使用C语言实现一个推箱子游戏。 2. 攻略 2.1 游戏规则 在推箱子游戏中,游戏界面通常由一个二维地图构成,地图上包含玩家、箱子、目标位置和障碍物等元素,如下所示: ####### #*…

    C 2023年5月23日
    00
  • Recommended C Style and Coding Standards中文翻译版

    首先,需要明确“Recommended C Style and Coding Standards”是一份由美国国防部发布的规范文档,旨在规范C语言程序的编写。该文档包含了C语言编程所需的规范、风格、注释、命名、代码布局和格式等方面的建议。如何应用该文档,建立自己的编程风格呢? 以下是应用“Recommended C Style and Coding Stan…

    C 2023年5月22日
    00
  • thinkphp3.2同时连接两个数据库的简单方法

    想要在ThinkPHP 3.2中同时连接两个数据库,可以按照以下步骤进行: 1. 配置数据库连接参数 在ThinkPHP中,数据库连接参数是在./Application/Common/Conf/config.php文件中进行配置的。我们需要在这个文件中,将两个数据库的连接参数都进行配置。 以下是一个示例配置文件中同时连接两个MySQL数据库的配置代码: re…

    C 2023年5月23日
    00
  • 浅谈C++空间配置器allocator

    浅谈C++空间配置器allocator 什么是空间配置器allocator C++中的空间配置器allocator是在使用new/delete进行内存管理的时候,对内存进行分配和释放的一种通用工具。allocator的主要目的是为了解决C++标准库中容器和算法在内存管理方面的低效问题。C++标准库提供了多个类型的allocator,可以满足不同场景下的需求。…

    C 2023年5月22日
    00
  • Qt实现编辑数据库数据的方法详解

    Qt实现编辑数据库数据的方法详解 介绍 Qt是一个跨平台的应用程序开发框架,提供了一系列GUI界面开发工具和非GUI应用所需的服务。它可以在多平台上运行,包括Windows、Mac OS X、Linux、Android和iOS等操作系统。其中,Qt的数据库模块提供了一种轻松管理和操纵数据库数据的方式。 步骤 第一步:连接数据库 首先,在Qt中连接到数据库是必…

    C 2023年5月22日
    00
  • C语言实现校园导游系统

    C语言实现校园导游系统攻略 1. 系统概述 本系统旨在实现校园导游功能,包括以下两个主要功能: 给出校园地图,包括景点名称、景点描述、景点图片等信息。 提供导游功能,可根据用户输入,为用户提供一条包含多个景点的导游路线,并展示每个景点的信息和图片。 本系统使用C语言实现。主要技术栈包括链表结构、图论算法、文件读写等。 2. 实现过程详解 2.1 数据存储 本…

    C 2023年5月23日
    00
  • 基于C++中常见内存错误的总结

    让我来为您详细讲解一下“基于C++中常见内存错误的总结”的完整攻略。这篇攻略的目的是总结和介绍C++中常见的内存相关错误,帮助C++程序员更好地解决内存错误的问题。 概述 C++是一门高效并且功能强大的编程语言。然而,由于C++是一门面向底层的语言,程序员需要自己管理内存。如果内存管理不当,会导致一系列的内存错误,比如内存泄露、野指针等。这些内存错误很难被发…

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