创建进程

 1 // 04 创建一个进程.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <windows.h>
 6 #include<stdio.h>
 7 BOOL CreateChildProcess(LPWSTR lpPath, BOOL bWait);
 8 int _tmain(int argc, _TCHAR* argv[])
 9 {
10     PROCESS_INFORMATION pi = {};
11     STARTUPINFO  si = {};
12     CreateProcess(
13         TEXT("E:\软件安装\Bin\QQ.exe"),       //exe文件路径
14         NULL,      //lpCommandLine传递给新进程的命令行字符串,此参数类型为PTSTR,意味着在执行过程中可能修改传入的值
15         NULL,      //lpProcessAttributes进程安全属性
16         NULL,      //线程安全属性
17         FALSE,     //表示新创建的子进程是否继承父进程的所有句柄,是的话子进程就可以访问父进程创建的所有句柄
18         NULL,      //子进程的创建方式
19         NULL,      //指向保存有进程环境的当前目录
20         NULL,      //新创建子进程的当前目录
21         &si,       //不能省略,指向子进程创建配置结构体,此结构体可以详细控制子进程的各种创建状态
22         &pi);      //不能省略,返回进程创建的详细信息
23     return 0;
24 }
25 BOOL CreateChildProcess(LPWSTR lpPath, BOOL bWait){
26     STARTUPINFO  si = { 0 };//新进程窗口特性
27     PROCESS_INFORMATION pi = { 0 };//新进程信息结构体
28     si.cb = sizeof(si);
29     //1.创建子进程,并判断是否成功
30     if (!CreateProcess(lpPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi));
31     return FALSE;
32     //是否需要等待进程执行结束
33     if (bWait)
34         WaitForSingleObject(pi.hProcess, INFINITE);
35     //关闭进程句柄和线程句柄
36     CloseHandle(pi.hProcess);
37     CloseHandle(pi.hThread);
38     return true;
39 
40 }