WinAPI执行外部程序和创建新进程:CreateProcess()的使用
一、基本原理和流程
执行一个外部程序实质上可以认为就是创建一个进程
windows系统下创建一个进程意味着:
1、创建一个内核对象:内核对象是windows系统用于管理进程的一个工具,可以认为是一个数据结构。
2、创建一个地址空间:用于存放可执行文件的代码和数据
当调用CreateProcess()时,windows会自动创建一个进程内核对象,将进程内核对象引用计数设置为1,并将可执行文件的代码和数据加载到地址空间,然后再创建相应的主线程的内核对象,最终执行入口函数
二、CreateProcess的定义
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
三、参数详解
CreatProcess()需要若干参数来指定新进程的运行方式,但实际使用中多半参数都是用不到的,可以设置为NULL
1、lpApplicationName
这个参数用于指定可执行文件的名称也可以是可执行文件的路径
该参数的类型是LPCTSTR,其实就是一个const char*的传统C字符串,要求以’0’结尾,需要注意的是这必须是个常量字符串
需要注意的是在lpApplicationName中必须指定扩展名(.exe)并且如果没有指定路径,windows将只在当前目录中寻找,没有找到就会出错返回False。另一方面,即使指定了lpApplicationName也会把lpCommmandLine(命令行参数)原封不动的作为命